请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请问老师关于tsc编译Promise

请问下老师我的项目里代码全部使用tsc编译。我想让ts让babel一样可以编译我的Promise拥有Promise的polyfill。查阅官网我发现配置lib库就可以解决。但是我这么配置后发现还是无效。

{
  "exclude": [
    "node_modules",
    "**/*.stories.tsx",
    "**/*.test.tsx"
  ],
  "include": [
    "./lib/"
  ],
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "ESNext", "es5", "es2015.promise"],
    "jsx": "react",
    "module": "ESNext",
    "moduleResolution": "node",
    "baseUrl": "./",
    "paths": {},
    "allowJs": false,
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true,
    "isolatedModules": true,
    "alwaysStrict": true,
    "declaration": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "allowSyntheticDefaultImports": true,
    "outDir": "./types"
  }
}

请问老师我应该如何处理呢

正在回答 回答被采纳积分+3

1回答

张轩 2021-10-28 09:36:08

同学你好 lib 和编译出来的代码没有关系。请看问答:https://github.com/microsoft/TypeScript/issues/14308


The lib option is only for typechecking, it doesn't affect codegen.

针对低版本的浏览器不支持 Promise 的话,需要手动的设置 polyfill

这文章写的很好,强烈建议看一下:https://juejin.cn/post/6844903869579788296 正好解决你的问题

0 回复 有任何疑惑可以回复我~
  • 提问者 hy_wang #1
    老师那我理解是说 TS是没办法支持Promise等polyfill的,是需要额外引入对应的polyfill对吧。有一个小疑问就比如我们项目中的组件库,我需要使用babel来处理这些Promise的polyfill吗。
    
    如果说我没有处理这些Promise的Polyfill,同时别人在项目代码中使用我的组件库时使用babel编译排除了node_modules,那么此时低版本浏览器下是不是会报错。
    
    如果我在我的组件库中处理了这些Polyfill,会不会和业务代码中造成重复处理造成额外增加包体积
    回复 有任何疑惑可以回复我~ 2021-10-28 19:36:09
  • 张轩 回复 提问者 hy_wang #2
    假如要支持低版本浏览器 就要引入 polyfill,增加进来肯定要增加体积,就和单独手写了一个 Promise 一样,所以利弊自己权衡哈,
    回复 有任何疑惑可以回复我~ 2021-10-29 09:13:37
  • 提问者 hy_wang 回复 张轩 #3
    老师如果使用这在项目中已经使用了babel去增加polyfill,此时我如果在组件库中定义了polyfill。是不是就造成了冗余的引入了。除了让使用者在此调用babel去编译组件的代码。还有更好的方式吗
    回复 有任何疑惑可以回复我~ 2021-10-29 16:27:43
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号