Typescript 什么是打字脚本;lib";选择真的吗?

Typescript 什么是打字脚本;lib";选择真的吗?,typescript,lib,Typescript,Lib,我仍然没有找到好的答案。“target”选项定义结果将在哪个版本的Javascript上运行。“lib”选项在任何地方都描述得不太清楚。似乎这是一种更精细的方式来描述目标环境,但奇怪的是,它会影响您在.ts源文件中可以编写的内容。认为TS作为JS的超集是什么,那么为什么它会影响例如,Promise()是否可用?这似乎不仅定义了目标,还影响了Typescript中可用的函数。有人能解释清楚或直接回答吗(typescriptlang.org或我看过的书中没有,例如,“指定要包含在编译中的库文件”,这

我仍然没有找到好的答案。“target”选项定义结果将在哪个版本的Javascript上运行。“lib”选项在任何地方都描述得不太清楚。似乎这是一种更精细的方式来描述目标环境,但奇怪的是,它会影响您在.ts源文件中可以编写的内容。认为TS作为JS的超集是什么,那么为什么它会影响例如,
Promise()
是否可用?这似乎不仅定义了目标,还影响了Typescript中可用的函数。有人能解释清楚或直接回答吗(typescriptlang.org或我看过的书中没有,例如,“指定要包含在编译中的库文件”,这完全没有任何解释。

Typescript没有任何内置类型所有类型都来自一组基本定义(位于typescript安装目录中的
lib
文件夹中)。默认情况下,
target
定义包含哪些
lib
。例如,状态:

注意:如果未指定--lib,则将插入库的默认列表。插入的默认库为:

► 对于
——目标ES5:DOM、ES5、ScriptHost

► 对于
——目标ES6:DOM、ES6、DOM.Iterable、ScriptHost

其基本思想是,虽然target is处理语言特性(更具体地说,哪些语言特性需要向下编译,例如:for of或arrow函数),但
lib
选项处理运行时环境具有哪些功能(即内置对象的外观、它们是什么)


理想情况下,对于给定的
目标
,应该使用默认的
libs
。但是,我们可能有一个支持一些运行时设施但不支持语言功能的环境,或者我们可能以较低的
es
版本为目标运行时,并填充一些运行时设施,这通常可以为一些人完成事物(例如:承诺)。

记住,TS从不在代码中注入多填充。这是对上述答案的补充:

target
告诉TS您希望最终/传输的代码支持哪种ES规范。如果将其配置为
ES5
,TS将向下编译语法功能到ES5,因此代码中的任何箭头函数
()=>{}
都将转换为
函数(){}

无论您为
target
选择什么,都会影响
lib
的默认值,这反过来会告诉TS要在项目中包含哪些类型定义。如果您有
“target”:“es5”
lib
的默认值将是
[“dom”、“es5”、“ScriptHost”]
。这是假设浏览器在运行时支持哪些功能特性。将内容添加到
lib
只是为了让TS满意-您仍然需要自己在项目中导入polyfill

因此,简而言之:首先配置
target
,如果您的项目中需要任何额外的polyfill,或者您知道您的浏览器将支持这个额外的小功能,
lib
是如何让TS满意的

例如: 您需要支持IE11,但也希望使用Promissions。IE11支持ES5,但Promissions是ES6功能。您导入Promissions polyfill,但TS仍给出错误。现在您只需告诉TypeScript您的代码将以ES5为目标,并且在代码库中使用Promissions是安全的:

"target": "es5",
"lib": ["dom", "es5", "ScriptHost", "es2015.promise"]

但是libs也会影响Typescript端的可用特性?(比如Promise())为什么不总是多边形?这是为了声明目标环境中可用的非TS设施吗?好吧,
Promise
是一种类型,所以我所说的适用。Typescript尝试在生成的代码中最少出现。您需要多边形填充,您需要添加这些填充。谢谢。在任何地方都找不到真正解释过的n typescriptlang.org这是迄今为止我读到的关于这个主题的最清晰、最简洁的答案。谢谢!