在 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"
or
- "ES2017"
- "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;
- (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 代码着色。
来源: http://www.cnblogs.com/fyter/p/typescript.html