網(wǎng)站首頁 編程語言 正文
今天試了下在Asp.net core中集成typescript,發(fā)現(xiàn)vs2019對typescript集成的支持還是非常友好的。本文在這里簡單的介紹一下。
由于typescript文件是編譯為js后作為靜態(tài)文件發(fā)布的,因此首先需要啟用靜態(tài)文件瀏覽:
app.UseStaticFiles();
在WWWRoot文件夾下添加ts文件:
此時VS會提示安裝Microsoft.TypeScript.MSBuild Nuget包,根據(jù)向?qū)О惭b即可。
編輯TypeScript文件,可以看到生成了相應(yīng)的js文件。
新建html文件,引入生成的js文件即可。
<script src="scripts/app.js"></script>
以上就是一個基本的流程,本身是比較簡單的,VS自動集成了build工具,編輯或生成項(xiàng)目的時候,會將ts文件生成js文件,html中直接引用生成的js即可。
另外,系統(tǒng)還會自動發(fā)布ts和map文件,可以以ts文件的 直接調(diào)試,非常方便。
在IE中啟用Async/Await支持
async/await是我非常喜歡的語法,但它是ES2107中引入的,無緣于IE。而現(xiàn)在的項(xiàng)目是要保持IE的支持,使用typescript一個好處是可以在IE11中使用async/await語法。
為了演示這一過程,首先寫一個測試函數(shù):
function?delay(ms:?number)?{
????return?new?Promise<void>(resolve?=>?setTimeout(resolve,?ms));
}
async?function?foo()?{
????console.log("Knock,?knock!");
????await?delay(1000);
????console.log("Who's?there?");
????await?delay(1000);
????console.log("async/await!");
}
編譯的時候發(fā)現(xiàn)無法通過,提示沒有Promise,要求將lib改成es2015的版本。
注意:這里不是講js的輸出版本改成es2015,如果這樣改了的話,能編譯通過,但會輸出es2015的腳本,是無法在ie11上運(yùn)行的
解決方法是增加一個tsconfig.json文件,指定typescript的編譯選項(xiàng),這里是我的一個參考配置:
{ ????"compilerOptions":?{ ????????"noImplicitAny":?false, ????????"noEmitOnError":?true, ????????"removeComments":?false, ????????"sourceMap":?true, ????????"lib":?["es6",?"dom"], ????????"target":?"es5" ????}, ????"exclude":?["node_modules"] }
注:tsconfig.cofig指定的選項(xiàng)的優(yōu)先級是比csproj中的typescript選項(xiàng)高的,加了這個文件后,我們是可以將csproj文件中的相應(yīng)配置刪掉的。另外,這個配置文件里面也可以進(jìn)行更多的配置設(shè)置。
因?yàn)槲覀円敵鰹镮E中支持的腳本,這兒的targert選擇的是es5。增加了這個選項(xiàng)后,就可以編譯通過了,但是,在IE中運(yùn)行的時候還是出錯:
原因很簡單,es5的runtime中沒有promise結(jié)構(gòu)的定義。要解決這個問題,我們需要安裝promise-polyfill的npm包。這里我是在html中直接引用CDN腳本
<script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js"></script>
加入了該腳本后,就可以愉快的在ie中進(jìn)行await了。
總結(jié)一下也就是額外的兩步:
添加tsconfig,指定es6的lib
添加promise-polyfill的引用
當(dāng)然,如果只考慮高版本的chrome的話支持,就沒有這么麻煩,直接指定target為es2017即可,生成的JS腳本更加簡潔。具體原理可以參看參考文檔2,這里就不介紹了,
原文鏈接:https://www.cnblogs.com/TianFang/p/13388393.html
相關(guān)推薦
- 2022-09-14 Python詳細(xì)講解淺拷貝與深拷貝的使用_python
- 2023-05-22 Pytorch怎樣保存訓(xùn)練好的模型_python
- 2022-12-01 Linux利用inotify和rsync服務(wù)實(shí)現(xiàn)數(shù)據(jù)實(shí)時同步的原理解析_Linux
- 2023-01-01 一文帶你弄懂Python3中的def?__init___python
- 2022-07-10 linux 目錄和文件管理
- 2022-06-08 Spring Cloud Nacos 配置變更感知
- 2022-09-26 折半插入排序算法詳解之C語言版
- 2022-04-18 python?selenium在打開的瀏覽器中動態(tài)調(diào)整User?Agent_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支