TypeScript笔记:简介(一)

TypeScript是javascript的超级集。Typescript通过向JavaScript增加可选的静态类型声明来把Javascript变成强类型的语言。TypeScript允许我们明确的声明一个变量的类型,这种允许声明变量类型的功能就是被大家所熟知的可选静态类型声明。

var counter;
var counter = 10;
var counter: number;

typescript能自己推到出来类型,若推到不出默认any。

  • 变量、基本类型和运算符

boolean     number(浮点)  string   array(数组  var list: number[] = [1,2,3]     var list: Array<number> = [1,2,3])  

enum(为了给一个数字集合更好的命名。enum中的成员默认从0开始,也可以手动设置成员中的值来更改这种默认的行为。enum Color {red, Green,Blue}    var c : Color =Color.Green;)

any (any类型在你知道一部分类型的情况下也很方便,比如你可能有一个混合了各种类型元素的数组:var list: any[] = [1,true,"free"];list[1] = 100;)

void (在某种程度上any的对立面就是void,所有类型的不存在)

【Javascript中 undefined 和null 可以当做类型来用,ts不可以】 

  • var、let和const

var 声明的变量保存在最近的函数作用域中(如果不在任何函数中则在全局作用域中)

let 声明的变量保存在比函数作用域小的最近的块作用域中(如果不在任何块中则在全局作用域中)

const 创建一个保存在创建位置作用域中的常量,可以是全局也可以是块作用域。

  • 联合类型

var path: string[]|string;
path = "/temp/log.xml";
path = ['/temp/log.xml','/temp/errors.xml'];
path = 1; //错误

联合类型可以用来声明那些可以存储多少能够数据类型的值的变量。

  • 类型守护

可以在运行时使用typeof或者instanceof运算对类型进行验证。TypeScript语言服务会在if区域寻找这些运算符,然后对应的更改类型:

var x: any = {/*....*/};
if(typeof x === 'string')
{
    console.log(x,splice(3,1));//错误,'string'上不存在splice方法
}
                               //x依然是any
x.foo();                       //合法
  • 类型别名

允许type关键字声明类型别名:

type PrimtiveArray = Array<string|number|boolean>;
type MyNumber = number;
  • 环境声明

环境声明允许在TS代码中创建一个不会编译到js中的变量

customConsole.log()//错误

如果你尝试调用customConsole对象上的log方法,ts会告诉我们声明customConsole对象。

如果我们希望调用一个未定义的对象上的方法,比如window对象上的console   console.log();当访问DOM(文档对象模型)或BOM(浏览器对象模型)对象时,没有错误,是因为这些对象已经在一个特殊的TS文件中被声明了,我们可以使用declare操作符创建一个环境声明。

下面代码中我们回声明一个customConsole对象的实现接口。然后使用declare操作符在作用域中增加一个customConsole对象:

interface ICustomConsole{
   log(arg: string): void;
}
declare var customConsole: ICustomConsole;

这样就使用customConsole.log();

//TODO: 接口

TS默认包含一个名为lib.d.ts 的文件,它提供了像DOM这种js内置库的接口声明。

使用.d.ts结尾的声明文件,是用来提高ts对象第三方库和像Node.js或浏览器这种运行时环境的兼容性。

//TODO:.d.ts文件使用

  • 算数运算符

+、-、*、/、%、++、--

  • 比较运算符

==  运算元是否相等

===  运算元的值和类型是否相等

!=  运算元是否不等

!==    运算元的值和类型是否都不等

> 、<、>=、<=

  • 逻辑运算符

&& 与  ||     或   ! 非

  • 位运算符

&按位与 、|按位或、^按位异位、~按位取反 、<<左移*2  、>>右移/2、 >>>无符号右移操作符

*注:ts和js中位运算并不高效,需要先转成32位整数进行位运算,再转会浮点型。

  • 赋值操作符

= 、+=、-=、/= 、*= 、%=

  • 流程控制语句

if 、if...else、? : ;、switch、while、do ...while、for

  • 迭代控制对象的属性(for ... in) 

for ... in语句的愿意是枚举对象的属性

var obj: any = {a: 1,b: 2,c:3};
for (var key in obj)
{
    console.log(key + "="+obj[key]);
}
//输出
//"a = 1"
//"b = 2"
//"c = 3"

这段代码会沿着原型链,将继承的属性也进行枚举。for ... in 语句会沿着对象的原型链迭代,枚举出包括继承的属性的多有属性。如果只想枚举对象的自己属性(非继承属性),可以使用hasOwnProperty方法:

for(var key in obj)
{
  if(obj.hasOwnProperty(prop)){
     //prop没有被继承
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值