for each
for in
for of
//gernerator函数
function * testfun(){
console.log('start')
yield;
console.log('end')
}
var fun=testfun()
fun.next()
fun.next()
//rest和spread操作符
function fun1(a,b) {
console.log(a,b)
}
function fun2(...args) {
args.forEach(function (arg) {
console.log(arg)
}
}
var args = [1, 2]
fun1(...args)
fun2(1,2,3,4)
//
// a是必传参数 //b是选传参数? 代表可选参数 不能放在必传参数前面 //c是默认参数
var name: string = '1111111'
function test(a: string,b?:string, c: string='lemon') {
console.log(a,b,c)
}
test('11111','jjjjj','456455')
test('11111','jjjjj')
test('11111')
var name: string = '1111111'
function test(a: string, b: string='lemon') {
console.log(a,b)
}
test('11111','jjjjj')
test('11111')
var myname: string = 'jfrhrhgrgirjgo' //字符串类型
var alias: any = 'jawen' //任何类型
var age:number = 13 // 数字
var man: boolean = true //布尔值
// 方法申明不需要返回值void
function test(): void{
}
// 方法申明返回值类型string
function test(): string{
return 'lemon'
}
// 方法传参类型
function test(name:string): string{
return name;
}
test('lemon')
//自定义类型
class Person{
name: string;
age:number
}
var user: Person = new Person();
user.name = 'lemon'
user.age=20
// 自动拆分
function test(template, name, age) {
console.log(template)
console.log(name)
console.log(age)
}
var name = 'ts学习'
var getAge = function () {
return 18;
}
test`hello my name is${name},I am ${getAge()}`
czc
asdadasdadsad
测试
类 介绍 这一章节 还需经常复习
安装typings工具 ,类型定义文件可以从typings中获取
类型定义文件(*.d.ts) 可以从Github中查找(见截图)
在TS中使用其他JS库
注解:为类,方法,变量 添加说明;供工具或框架使用
在TS中,一个文件就是一个模块
interface 接口名{ 属性名; 方法调用(); }
当 接口 作为参数的 方法类型声明 时,TS会检查 传入的参数 是否满足 接口声明的所有属性
当类实现implements 一个接口时,必须实现这个接口中定义的方法
var workers:Array<Person> = []; // 泛型Person 规定了 数组workers 里只能放Person类型 Employee 继承自 Person所以可以放Employee实例
extends实现继承
子类构造内部必须调用父类构造super()
super.父类方法( );// 调用父类方法
class Person{ name;//声明name属性 constructor(name:string){ this.name = name; } } 可以简化为 class Person{ constructor(public name:string){ //构造函数 参数 需要明确声明访问控制符否则不会声明name属性 ... } }
访问控制符,public; private; protected(类内部及子类可以访问) ; 不写默认是public,在类外部可以访问
类的继承通过constructor实现 类被实例化的时候调用一次 constructor方法
注意: TS与JS语法的不同 声明一个name属性
JS中可以给数组新增属性 arr.desc = "xxx"; TS中不能
forEach 会忽略属性desc;forEach 不能中断循环;可以用every() 代替
for /in 可以循环出数组的属性 desc
for / of 循环 忽略属性desc ,直接循环是值value,不是索引key。可以打断循环。可以循环 对象,数组,map,set,字符串
获取嵌套对象price中的price2属性
{code:codex} = {code:"IBM"}
将code值取出放入codex中;相当于给code起别名
: 指定参数类型
= 指定参数默认值
?标明此参数为可选参数(没有传值时,参数值为undefined)
同时存在 a?:string = "xxx";
可选参数不能声明在必选参数之前
参数类型:在参数名称后面使用 冒号 来指定参数的类型
五种基本类型: string any number boolean void(不返回任何值)
给变量声明类型
var myname:string = "zs";// 指定类型为string类型,赋其他类型值会在TS编辑器中报错 ;转换为JS后可以正常执行
TS类型推断机制 : 不指定类型 ,默认以第一次赋值的类型为准
var n:any = "xxx"; // 指定为any类型可以为这个变量赋任何值
2. 给方法声明类型
function test() :string { return “”} // 声明string 类型的返回值
:void 声明方法 无返回值,有返回值时会报错
3. 给函数参数声明类型
function test(name:string){ } test('')// 调用时只能用string类型的变量去调用
4. 自定义类型(通过class或接口声明)
`` 多行字符串模板; ${变量名} ${函数调用}
自动拆分字符串:可以用字符串模板去调用一个方法,同时把模板中的字符串 作为实参 传递给 函数形参
test `hello my name is ${myname} i’m ${getAge()} `
第一个参数是模板字符串中被遍历拆分成的一个字符串数组
其余参数是 字符串变量
npm i -g typescript 全局安装TS
tsc xxx.ts 编译TS文件
TS在线编译器
ES5,ES6,javaScript,TypeScript的概念和关系:
javaScrpt实现了ES5的规范,TypeScript实现了ES6的规范
forEach只循环数组的值没有属性,不可break
for in 都循环
for of 只循环数组的值没有属性,可break