-
...args rest and spread, any number of param
args: array
查看全部 -
可选参数 b?: string
查看全部 -
函数参数默认值 function test(a: string = "kk"),带默认值的要放在后面比较好
查看全部 -
: 来声明类型
查看全部 -
1.类型检查 2.语法提示 3.更好的学习anguler框架
查看全部 -
ES 是客户端脚本语言的规范
JS实现了ES5的规范
TS实现了ES6的规范
查看全部 -
基本特性
字符串新特性
多行字符串(类似es6的字符串模板)
字符串模板(同上)
自动拆分字符串
参数的新特性
参数的类型
在参数名称后面使用冒号来指定参数的类型:声明方式
var/let variable:type
;声明变量类型后编译器会检查变量赋值类型。编译后类型变化不会报错。
参数的特性
类型推断机制:首次赋值时判断变量类型。
// 定义一个变量,并且指定他的类型var myname:string ='zhai liang'// 如果在指定变量类型后,赋了一个错误的类型,那么就会报错myname = 13;// 报错// 类型推断机制:如果第一次给变量赋值后,默认了变量了类型var myname = 'aiaii';myname = 13;// 报错// 如果希望变量不限制类型,那么指定为any型var alias:any = 'xixi'
- 方法返回值除了可以声明为基本类型外,也可以声明为void,表示没有返回值。方法的参数也可以声明类型。
// viod:声明函数不需要返回值 function test(name:string):viod{alert('此函数不需要返回值')}
自定义类型
class Person(){name: String;age: number;}var zhangsan:Person = new Person();// 此时的zhangshan就会有两个属性
默认参数
在参数声明后面用等号来指定参数的默认值;
给方法的变量指定默认值
function test(a:string,b:string,c:string='jojo'){}// 带默认值的参数需要放在整个参数的后面
可选参数
在方法的参数声明后面用问号来标明此参数为可选参数
function test(a:string,b?:string,c:string='jojo'){}
函数新特性
Rest and Spread操作符
用来声明任意数量参数的方法
function test(...args){args.forEach(function(arg){console.log(arg)})}test(1,2,3,4); //1,2,3,4test(5,6); //5,6// 或者function test(a,b,c){console.log(a,b,c)}var args = [7,8,9,10]test(...args);// 7,8,9var args1 = [1,2]test(...args1);// 1,2,undefined
generator函数
控制函数的执行过程,手工暂停和回复代码执行;
// generator函数声明*function* doSomething(){console.log('start');// 关键字yieldyield;console.log('finish')}// 调用doSomething(); // 错误// 正确调用var func = doSomething();func.next();// 自动买股票function* getStockPrice(stock){// 无限循环,每次循环的时候都会停一下while(true){yield Math.random()*100 //关键字yield 会返回当前语句的值,类似于return。但在生成器函数中,return受到使用限制。}}var priceGenerator = getStockPrice('IBM');var limitPrice = 15;var price = 100;// 判断价格是否低于15while(price>limitPrice){// 大于15时,走一下生成器,重新赋值price// 当price一旦小于15,那么就将停止执行生成器price = priceGenerator.next().value;console.log(`返回${price}`)}console.log('----')
destructuring析构表达式
通过表达式将对象或数组拆解成任意数量的变量;
// 对象或者函数的析构function getStock(){return {code: 'IBM',price: 100}}var stock = getStock();var code = stock.code;var price = stock.price;// 等价于var {code,price} = getStock()// 结果console.log(code); // 'IBM'console.log(price); // 100// 也可以重命名var {code:codex, price} = getStock()console.log(codex,price) // 'IBM' 100// 如果函数返回的是一个对象,可以取出对象中的某个值function getStock(){return {code: 'IBM',price: {price1: 200,price2: 400},aaa: 'X',bbb:'hahhaha'}}var {code:codex,price:{price2}} = getStock()console.log(codex,price2) // "IBM" 400// 数组的析构var array1 = [1,2,3,4];var [number1,number2] = array1console.log(number1,number2) // 1,2var [,,number3,number4] = array1console.log(number3,number4) // 3,4var [number1,number2,...other] = array1console.log(other) // [3,4]// 复杂点的var array1 = [1,2,3,4];function doSomething([number1,number2,...other]){console.log(number1); //1console.log(number2); //2console.log(other); //[3,4]}doSomething(array1)
表达式与循环
箭头表达式
用来生命匿名函数,消除传统匿名韩树的this指针问题;
类似js的es6语法;
of循环
forEach(),for in,for of
for of类似于forEach,但是和forEach不同的是,它是可以中断的。
高级特性
面向对象特性
类
访问控制符
public:内外部都可访问。在属性没有指定访问控制符时就会默认为public。
private:内不可访问,外部不可访问
protected:内部和子类可访问,外部不可访问
构造函数(constructor):在类被实例化的时候会被调用,而且只会被调用一次。
super关键字
子类的构造函数必须调用父类的构造函数,使用super(父类构造函数名称);
调父类的其他方法,使用super.来进行调用。
泛型(generic)
参数化的类型,一般用来限制集合的内容
// 需要一种方法使返回值的类型与传入参数的类型是相同的// 本来定义function identity(arg: any): any {return arg;}// 使用any类型会导致这个函数可以接收任何类型的arg参数,这样就丢失了一些信息:传入的类型与返回的类型应该是相同的。如果我们传入一个数字,我们只知道任何类型的值都有可能被返回。// 泛型定义function identity<T>(arg: T): T {return arg;}// 给identity添加了类型变量T。 T帮助我们捕获用户传入的类型(比如:number),之后我们就可以使用这个类型。 之后我们再次使用了 T当做返回值类型。// 把这个版本的identity函数叫做泛型,因为它可以适用于多个类型。 不同于使用 any,它不会丢失信息,像第一个例子那像保持准确性,传入数值类型并返回数值类型。
接口(interface)
用来建立某种代码约定,是的其他开发者在调用某个方法或创建新的类时必须遵循接口所定义的代码约定。
// 定义一个接口interface IPerson{name:string,age:number}class Person{// 定义一个类,类中的构造函数,要求传入的都是IPerson作为其参数constructor(public config: IPerson){}}// 传入的参数必须是IPersonvar p1=new Person({// 接口中的属性都得有,否则会报错name:'zhangsan',age:18})
模块
模块可以帮助开发者将代码分割成可重用的单元。开发者可以自己决定将模块中的哪些资源(类,方法,变量)暴露出去供外部使用,哪些资源只在模块内使用。
模块是自声明的;两个模块之间的关系是通过在文件级别上使用imports和exports建立的。imports是引用,exports是暴露。
注解(annotation)
注解为程序的元素(类、方法、变量)加上更直观更明了的说明,这些说明信息与程序的业务逻辑无关,而是供指定的工具或框架使用的。
类型定义文件(*.d.ts)
类型定义文件用来帮助开发者在TypeScript中使用已有的js工具包,如jQuery。
查看全部 -
在声明的参数后用9问号表示可选参数,但必须要放在必填参数后面查看全部
-
参数声明后,用等于号设置默认值,这样在调用该方法时,也不必每个参数都传查看全部
-
参数类型,除了普通的,还有void表示方法没有返回值,自定义类class,里面可以走所有值的定义,当某个值等于该自定义类,则会有提示查看全部
-
字符串表达式调用函数,字符串表达式会被自动切割查看全部
-
嵌套复杂对象的析构表达式的用法
查看全部 -
this的值要看,函数或方法运行的时候所在的环境。
查看全部 -
访问装饰符只在ts中做代码检查用,编译之后是没有作用的,private的属性依然可以被访问到
查看全部 -
可选参数:function;text(a: string,b?: number){}
(在参数后加个问号?)
调 用: text("hell"," "); //OK
text("hell"); //OK,b为undefined;
查看全部
举报