ts 学习备忘(持续更新)

一、环境配置

Sublime 3搭建TypeScript开发环境
LayaAir引擎入门教程:一篇学会用TypeScript语言开发HTML5
使用VS Code调试TypeScript游戏程序JsTankGame成功!!!
Visual Studio Code的插件debugging in chrome怎么配置
版本不匹配! 全局 tsc (2.2.2) != VS Code 的语言服务(2.1.5)。可能出现不一致的编译错误
示例代码下面的*.js.map文件是干嘛的
source map,主要是方便chrome调试用,用来对应某行js代码对应的原ts的路径和行号。Chrome中的js调试器会在加载js时尝试加载同路径下的.map,然后根据map信息,尝试下载对应的ts代码,如果以上两步都成功完成,那么在给js下断点是就会下到对应的ts代码中的正确位置上。
如果不需要,可以在编译时调整.laya/launch.json中的sourceMaps选项,或者如果是自己调用tsc编译的,就调整tsconfig.json中的"sourceMap"开关。

二、快捷键

VS Code折腾记 - (2) 快捷键大全,没有更全
备注一下自己常用的:

Shift+F12 找到所有的引用
Ctrl + G    跳转行
Ctrl + Shift + K    删除行
Ctrl + P    打开资源
Shift+Alt+F 代码格式化:
Ctrl + Shift + | 匹配花括号的闭合处,跳转
Alt + up/down   移动行上下
Ctrl + /    添加关闭行注释
三、关键字let const

自己在laya的TS开发中用了let,出现莫名错误,还是不要换了
很多常见的问题都可以通过使用let来解决,所以尽可能地使用let来代替var吧。
let和var定义变量的区别
使用VS Code开发TypeScript--定义变量推荐使用let
Javascript 严格模式详解

(function() {
  var varTest = 'test var OK.';
  let letTest = 'test let OK.';

  {
    var varTest = 'varTest changed.';
    let letTest = 'letTest changed.';
  }
  //输出"varTest changed.",内部"{}"中声明的varTest变量覆盖外部的letTest声明
  console.log(varTest);
  //输出"test let OK.",内部"{}"中声明的letTest和外部的letTest不是同一个变量
  console.log(letTest); 
}());

ES6新增let和const两个变量声明命令,const与let不同点在于:

  • const如果声明的变量是简单的值,则不能改变变量的值,修改会报错;
  • const如果声明的是复合类型的变量,则只保证变量地址不变,值可以变;
四、箭头函数自动将函数中的this附加到上下文中

一步一步学习TypeScript(11.Arrow Functions_箭头函数➹)

function Arrow(age){
    this.age = age;

    this.add= function(){
        this.age ++;
        console.log(this.age);
    }
}

var arrow2 = new Arrow(10);
setTimeout(arrow2.add, 1000);  //期望值为11, 结果却是NaN.
//原因是setTimeout执行的上下文环境为window,使得add方法中的this脱离了原上下文而指向了window. 

function Arrow1(age){
    this.age = age;

    this.add= ()=>{
        this.age ++;
        console.log(this.age);
    }
}

var arrow2 = new Arrow1(10);
setTimeout(arrow2.add, 1000); //11, 结果正确

//打开ts编译后的js代码
function Arrow1(age) {
    var _this = this;   //自动创建了一个_this变量,指向了当前上下文.
    this.age = age;
    this.add = function () {
        _this.age++; //在这里程序使用的是之前创建的_this中保存的上下文环境,而不是`this`
        console.log(_this.age);
    };
}

var arrow2 = new Arrow1(10);
setTimeout(arrow2.add, 1000);
五、TS语法基础

TypeScript Handbook(中文版)
https://www.tslang.cn/docs/home.html
从 ActionScript3 到 TypeScript(一)
从 ActionScript3 到 TypeScript(二)

类型推理var display = new Shape();
复合类型public source:BitmapData|string;
可以少写一个vo类

function CalculateArea(rect: {width:number; height:number; depth?:number;}): number
{}

TypeScript进阶玩法
JavaScript秘密花园
TyptScript语言手册
typescript-any-vs-object
枚举enum

六、TS调用第三方JS

ts(Egret) 与 js 的调用
tsd-提升IDE对JavaScript智能感知的能力
如何生成 .d.ts
cuixu.js:

function test(){
    console.log("cuixu test");
}

index.html中进行加载:

<!--jsfile--startTag-->
    <script src="js/cuixu.js"></script>
<!--jsfile--endTag-->

libs/cuixu.d.ts 添加声明

declare function test(): void;

LayaSample.ts中直接调用test()方法

七、Laya中自定义组件

自定义组件
把layaeditor.d.ts放到与LayaAir.d.ts同级即可

八、Object

ES5对象与ES6 Maps的异同
JavaScript对象详解
JavaScript Object 对象详解
参考TypeScript学习笔记(二):基本数据类型及数据转换
Object可以当做Hash表来使用,如下:

var obj: Object = {};

function run() {
    obj["a"] = 123;
    //obj.b = "asdf";//这种写法是错误的
    obj["b"] = "asdf";
    obj[100] = true;

    delete obj["100"];//删除使用 delete 关键字

    for (var key in obj) {
        alert(key);
        alert(obj[key]);
    }
}
run();
九、$字符串插值

https://rexdainiel.gitbooks.io/typescript/content/docs/template-strings.html
typescript使用${}字符串拼接方法

let v0:string='这个是电压'
let v1:number=220.35;
let str=`这个是格式化字符串(${v0}:${v1}V)`;
console.log(str)
//这个是格式化字符串(这个是电压:220.35V)

需要注意的是任何在插值(${ 和 })里的占位符都会被当成 JavaScript 表达式来执行,例如:你可以做数学计算。

console.log(`1 and 1 make ${1 + 1}`);
十、回调函数

TypeScript: this bind 和 回调的正确用法

namespace naiking
{
    /**
     *author     : NaiKing
     *description: 
     */
    export class TestCallAndThis {
        /**
         * 不推荐的回调写法
         * 外部调用必须【必须】【必须】在回调参数方法后面添加.bind(this),
         * 否则可能会this异常
         */
        public static callBackTest(arg:number,callBack:Function):void
        {
            //返回 2 x arg
            let result:number=arg*2;
            //不推荐直接调用回调方法,应使用callBack.call(caller,result);
            callBack(result);
        }
        /**
         * 推荐的回调写法
         * @param arg 参数
         * @param caller 调用域 
         * @param method 指定的回调方法(兼容.bind(this) 也可以不加.bind(this) )
         */
        public static callMethod(arg:number,caller:any,method:Function):void
        {
            //返回 2 x arg
            let result:number=arg*2;
            //推荐的做法 .call(caller,result);
            method.call(caller,result);
           
        }
    }
}

推荐第二种写法

namespage naiking
{
   export class Luna
   {    //注意观察,this异常的时候的isLoading的值是undefind
      private isLoading:boolean = false;
      private getResult(rst:number):void
      {
          console.log("get rusult:"+rst+this.isLoading);
        
      }
      constructor()
      {
          //不推荐的回调写法, 遗漏了bind(this)
          logic.TestCallAndThis.callBackTest(1,this.getResult);
          //不推荐的回调写法, 使用了bind(this)( √ )
          logic.TestCallAndThis.callBackTest(1,this.getResult.bind(this));
        
          //提倡的回调写法 ,有无bind(this)都可以
          logic.TestCallAndThis.callMethod(1,this,this.getResult);
          logic.TestCallAndThis.callMethod(1,this,this.getResult.bind(this));
      }   }}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容