标签:type 初始化 public 可选参数 推断 集合 面向 on() this指针
typescript是什么?
一些ES6常用语法和typescript语法
var string = "hello"+
"markdown"
var string = `hello
markdown`
var str = ",very good"
var fun = function(){return "javascript"}
var string = `hello
markdown ${str},${fun()}`
function test(template,arg1,arg2){
console.log("template")
console.log("arg1");
console.log("arg2");
}
var age1 = "a1"
var age1 = "a2"
test`hello,I like it${age1},dislike ${age2}`
答应出来的结果会是一个数组和2字符串,数组是被拆分的“hello,I like it”,“dislike“。
typescript是一种强类型的语言所以可以定义变量的类型
var name: string = "zheng dong";
var age = 13;
age = true;
上面的age=true会报错,因为age根据第一次使用的情况推断出了它是属于number型的。
function test() : void{
return "I love cl";
}
test()
上面的函数会报错,因为他的返回值定义的类型是void
class Person{
name:string;
age:number;
}
var zhengdong: Person = new Person();
zhengdong.name = "zhengdong";
function test(a: stirng,b?: string,c: string = "zhengdong"){
}
test("xxx")
上面代码中第二个参数使用了?的方式实现了参数可选传不传入
function test(...arg){
arg.forEach(function(arg){
console.log(arg);
})
}
test(1,2,3,4,5,6,7,8,9,10)
function getStock(){
return {
code:"IBM",
price:{
price1: 200,
price2: 400
}
}
}
var { code: codex,price:{price1,price2} } = getStock();
console.log(codex);console.log(price1);
var sum = (arg1,age2)=>arg1+arg2
其实箭头表达式就是一个匿名的回调函数。如果参数只有一个可以省略括号**(),如果函数体多行就要加上花括号{}**并且加上return
var sum = arg1=>{
return arg1+arg2;
}
其中箭头表达式更重要是地方是修复了ES5中this指正指向的问题
function getStock(name:string){
this.name = name;
setInterval(function(){
console.log(this.name);
},1000)
}
上面的打印是undefind的。因ES5中的this指针是指向调用者,所以当前this指向了setInterval,下面使用ES6的箭头函数可以修复这个问题
function getStock(name:string){
this.name = name;
setInterval(=>{
console.log(this.name);
},1000)
}
var test = [1,2,3,4,5];
test.no = "l love cl";
test.forEach(v=>console.log(v))
上面会输出数组的内容省去了属性,并且在循环当中break不了循环
在来看看for in循环
var test = [1,2,3,4,5];
for(var i in test){
console.log(i);
}
上面循环出来的是数组的key并不是他的值,并且会把属性也打印出来并且能使用break。
来看看es6的循环for of
var test = “l love cl”;
test.no = "no"
for(var v of test){
console.log(v);
}
上面的例子中会将test的字符串打印出来并且是逐个的遍历。使用for of可以break并且循环的就是数组的值并不是key,也不会循环test的属性
var Person{
construtor(public name:string){
}
eat(){
console.log(this.name);
}
}
var p1 = new Person("zhengdong");
p1.eat();
var p2 = new Person("dongzheng");
p2.eat();
上面实现了一个类并且在类的外面实例化了2个对象。
来实现ts中的继承
var Person{
construtor(public name:string){
}
eat(){
console.log(this.name);
}
}
class Employee extend Person{
construtor(public name:string,code:string){
super(name);
}
work(){
super.eat();
}
}
上面的Employee继承了Person类,在构造函数里面使用了super,这个方法是调用父类的构造函数这是ts中必须规定的,然后在work方法中调用父类的eat方法也是使用super.ea()的方式
var workers: Arrar<Person>= [];
workers[0] = new Person(“zhengdong”);
workers[1] = 2;
workers[1]会报错因为我们在类型规定的时候就写了类型Array数组里面的内容是Person的。
interface Animal{
eat();
}
class Sheep implements Animal{
eat(){
console.log("i eat");
}
}
使用interface定义一个接口,使用implements继承一个接口,接口也可以用来定义一个参数或者属性可以使用var v:Animal的方式实现可以不写implements
大家可以到这个仓库里面寻找现有的d.ts文件https://github.com/DefinitelyTyped/DefinitelyTyped
如果觉得找的很麻烦可以使用它的管理工具https://github.com/typings/typings这个仓库有使用说明
Thank you for your watch!(:
标签:type 初始化 public 可选参数 推断 集合 面向 on() this指针
原文地址:https://www.cnblogs.com/cnPakChoi/p/9287148.html