• TypeScript技巧集锦(陆续更新)


    在C++项目中编译TypeScript(以下简称ts)

      编辑ts文件的属性,项类型选择“自定义生产工具”。

      命令行输入tsc所在位置与编译参数,我的是"C:Program Files (x86)Microsoft SDKsTypeScript2.2 sc" %(Identity) --out %(RelativeDir)/%(FileName).js -t es5。有空格的UNC(通用命名惯例)需要用双引号引起来。%(Identity)是被编译文件位置。

        --out是输出参数,后面紧跟输出位置。可以忽略此参数,那么输出的文件名只是简单的修改ts扩展名为js。

        -t(--target)是目标类型,我用ES5,还可以是"ES3" (default), "ES5", "ES6"/"ES2015", "ES2016", "ES2017" or "ESNext"。

      说明写%(Identity)就可以,这个随意。

      输出写%(RelativeDir)/%(FileName).js,用于比较编译事件,判断编译必要性。

    ps:这是我研究的方法,我感觉还有更标准的。官方并没有介绍如何在c++项目中怎么编译。

    在ts中引用jquery的声明

      【仅适用于VS开发环境,不适合VSCode及其他IDE】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代码着色。

  • 相关阅读:
    P20 HTTP 方法的安全性与幂等性
    P19 查询参数
    P18 写代码:过滤和搜索
    P17 过滤和搜索
    P16 HTTP HEAD
    golang的json操作[转]
    Android中的Service 与 Thread 的区别[转]
    iOS的block内存管理
    Go并发编程基础(译)
    golang闭包里的坑
  • 原文地址:https://www.cnblogs.com/fyter/p/typescript.html
Copyright © 2020-2023  润新知