5.2 Deno中TypesScript配置
Typescript附带了大量可配置的不同选项,但Deno努力使其更容易与Deno一起使用Typescript。许多不同的选择阻碍了这一目标。为了方便起见,Deno将tyescript配置为“只工作”,不应该需要额外的配置。
这就是说,Deno确实支持使用打字配置文件,尽管与Deno的其余部分一样,检测和使用配置文件不是自动的。要将TypeScript配置文件与Deno一起使用,您必须在命令行上提供路径。例如:
> deno run --config ./tsconfig.json main.ts
⚠️ 但请考虑,如果您正在创建需要配置文件的库,如果您将模块分发为 TypeScript,则模块的所有消费者也会需要该配置文件。此外,在配置文件中可能会有设置,使其他 TypeScript 模块不兼容。老实说,最好使用Deno默认值,并考虑使用配置文件的时间长而难。
Deno如何使用配置文件
Deno不像TSC那样处理TypeScript配置文件,因为TypeScript配置文件的许多部分在Deno上下文中没有意义,或者如果应用它们会导致Deno无法正常工作。
Deno只查看配置文件的complerOptions部分,即使这样,它也只考虑某些编译器选项,而忽略其余的选项。
下面是可以更改的编译器选项的表,它们的默认格式为Deno,以及有关该选项的任何其他说明:
选项 | 默认 | 备注 |
---|---|---|
allowJs |
true |
这几乎永远不需要改变 |
allowUnreachableCode |
false |
|
allowUnusedLabels |
false |
|
checkJs |
false |
如果导致类型脚本键入检查 Java 脚本true
|
experimentalDecorators |
true |
默认情况下,我们启用这些,因为它们已经在代码中选择加入,当我们跳过类型检查时,基于 Rust 的发射器默认打开它们。我们强烈反对使用传统装饰器,因为它们不符合 JavaScript 中未来的装饰器标准 |
jsx |
"react" |
|
jsxFactory |
"React.createElement" |
|
jsxFragmentFactory |
"React.Fragment" |
|
keyofStringsOnly |
false |
|
lib |
[ "deno.window" ] |
此默认值因 Deno 中的其他设置而异。如果提供,则会覆盖默认值。有关更多信息,请参阅下文。 |
noFallthroughCasesInSwitch |
false |
|
noImplicitAny |
true |
|
noImplicitReturns |
false |
|
noImplicitThis |
true |
|
noImplicitUseStrict |
true |
|
noStrictGenericChecks |
false |
|
noUnusedLocals |
false |
|
noUnusedParameters |
false |
|
reactNamespace |
React |
|
strict |
true |
|
strictBindCallApply |
true |
|
strictFunctionTypes |
true |
|
strictPropertyInitialization |
true |
|
strictNullChecks |
true |
|
suppressExcessPropertyErrors |
false |
|
suppressImplicitAnyIndexErrors |
false |
有关编译器选项及其对TypeScript的影响的完整列表,请参阅 TypeScript Handbook
隐含的tsconfig.json是什么样子
要让他们表现得像Deno一样是不可能的。要让typescript表现得像Deno一样也很困难。这就是为什么我们在Deno中直接构建了typescript。话虽如此,理解其中隐含的含义是很有用的。tsc
。
如果你要为Deno写一个代码,它应该是这样的:tsconfig.json
{
"compilerOptions": {
"allowJs": true,
"esModuleInterop": true,
"experimentalDecorators": true,
"inlineSourceMap": true,
"isolatedModules": true,
"jsx": "react",
"lib": ["deno.window"],
"module": "esnext",
"strict": true,
"target": "esnext",
"useDefineForClassFields": true
}
}
您不能将此复制粘贴到脚本中并使其工作,特别是因为提供给TypeScript编译器的内置类型库是Deno的自定义类型库。这可以通过在命令行上运行命令并将输出通过管道传输到文件并将其作为程序的一部分包含在文件中,删除选项,然后将选项设置为.tsconfig.json
deno tyes“lib”
“noLib”``true`。
如果您使用标志,Deno会将选项更改为。如果您正在尝试加载Worker,也就是使用命令进行类型检查,而不是使用.--unstable``“lib”``[“deno.window”,“deno.Stability”]``“deno.worker”``“deno.window”
使用"lib" 属性
[TBC]