在C++項目中編譯TypeScript(以下簡稱ts) 編輯ts文件的屬性,項類型選擇“自定義生產工具”。 命令行輸入tsc所在位置與編譯參數,我的是"C:\Program Files (x86)\Microsoft SDKs\TypeScript\2.2\tsc" %(Identity) --ou ...
在C++項目中編譯TypeScript(以下簡稱ts)
編輯ts文件的屬性,項類型選擇“自定義生產工具”。
命令行輸入tsc所在位置與編譯參數,我的是"C:\Program Files (x86)\Microsoft SDKs\TypeScript\2.2\tsc" %(Identity) --outFile %(RelativeDir)/%(FileName).js -t es5。有空格的UNC(通用命名慣例)需要用雙引號引起來。%(Identity)是被編譯文件位置。
--outFile是輸出參數,後面緊跟輸出位置。
-t(--target)是目標類型,我用ES5,還可以是"ES3" (default), "ES5"
, "ES6"
/"ES2015"
, "ES2016"
, "ES2017"
or "ESNext"。
說明寫%(Identity)就可以,這個隨意。
輸出寫$(FileName).js,這個應該是判斷編譯必要性的。
ps:這是我研究的方法,我感覺還有更標準的。官方並沒有介紹如何在c++項目中怎麼編譯。
在ts中引用jquery的聲明
jquery並沒有使用ts編寫,所以git上也找不到ts文件,好在vs對jquery提供了強大的支持,任意項目類型新建html文件,包含任意版本jquery的js文件,那麼你的智能提示就自動支持$了。接下來滑鼠定位在$左或右按F12查看定義就會自動轉到index.d.ts文件,右鍵標簽選打開所在目錄,就能找到這個文件,複製到自己的項目目錄。
用三斜杠語法引用到當前ts文件/// <reference path="jquery.d.ts"/>
.d.ts文件是聲明文件,並不含有邏輯代碼,只是結構而已。
如何為自己的ts文件生成聲明文件
同前,tsc編譯程式可以生成聲明文件,只需要參數-d/--declaration 及ts文件即可。
例如:tsc -d main.ts
用命令行編譯ts文件?
可以,只要你不嫌麻煩。VS的開發者命令提示符(Developer Command Prompt for VS 2017)可以直接使用tsc命令。你可以把它固定到“開始”屏幕,提高開啟效率。
拿不到聲明如何解決
declare var swal: (arg: any) => any;
加入你有swal這樣一個函數並沒有提供ts聲明,這樣就可以自由使用了。當然,這是一個參數的掉用。
ts里HTMLElement.remove這個成員是不存在的,只能用它父對象的removeChild,這樣不是很方便。
dom:HTMLElement;
(<any>dom).remove();// 就這樣勉強的轉為any再調用remove吧。
不用為每個對象都建立一個類
ts的class不支持內部聲明class。所以成員的類型聲明在class外面也不太合適。
class foo{ member:{mem1:number, mem2?:string};// 加問號表示可有可無 }
這樣member就類似一個內部類了。
事件的訂閱及this參數
class bar{ sub(){ dom.onclick=function(){this}; } }
這樣function函數里的this是dom對象。
dom.onclick=()=>{this};
這個this表示的是類bar的實例。
那麼我想又要有dom這個對象,又要有bar的實例呢?
我目前只能用閉包了:
class bar{ click(node:HTMLElement, ev:MouseEvent){ this... } dom.onclick = (ev:MouseEvent)=>this.click(dom,ev); }
dom用閉包傳進去,this還是你期待的this,畢竟click是bar的成員函數。
只讀屬性不用readonly
如果你想修改,readonly對類內部訪問不太方便
所以應該用Object.defineProperty,ts有更方便的set/get操作屬性。
class baz{ _attr:[]; get attr(){ return _attr; } }
這樣attr就只能讀取了。要使用屬性特性,需要將ts編譯器的目標選項(-t/--target)設置到es5或以上。
本文章會持續更新,只要是ts的相關技巧我都會更新,如果你也關註typescript技術,請關註我/收藏此文章。
btw:cnblogs不支持ts代碼著色,用的JS代碼著色。