资讯专栏INFORMATION COLUMN

实列讲解TypeScript的基本用法

wean / 1240人阅读

摘要:是微软开发的的超集,兼容,可以载入代码然后运行。可处理已有的代码,并只对其中的代码进行编译小编我决定使用白鹭引擎开发游戏,在开发游戏之前学习一下,目前它的可视化工具已经可以打多端包了是一套完整的游戏开发解决方案。中包含多个工具以及项目。

TypeScript 是微软开发的 JavaScript 的超集,TypeScript兼容JavaScript,可以载入JavaScript代码然后运行。TypeScript与JavaScript相比进步的地方 包括:加入注释,让编译器理解所支持的对象和函数,编译器会移除注释,不会增加开销;增加一个完整的类结构,使之更新是传统的面向对象语言

JavaScript 的 TypeScript 的区别
TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法,因此现有的 JavaScript 代码可与 TypeScript 一起工作无需任何修改,TypeScript 通过类型注解提供编译时的静态类型检查。TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript 代码进行编译

小编我决定使用白鹭引擎开发游戏,在开发游戏之前学习一下TypeScript,目前它的可视化工具已经可以打多端包了

Egret是一套完整的HTML5游戏开发解决方案。Egret中包含多个工具以及项目。Egret Engine是一个基于TypeScript语言开发的HTML5游戏引擎,该项目在BSD许可证下发布
1.字符串新特性 ``

1.字符串换行

var content = `1111 
22222`

2.字符串模板

var name = "羊先生"
var getName = function(){
    return "杭州"
}
console.log(`我是${name}来自${getName()}`)//输出:我是羊先生来自杭州

字符串模板不请阔以使用变量还阔以使用函数调用

自动拆分字符串

function test(tp,name,age){
   console.log(tp)
   console.log(name)
   console.log(age)
}
   var myname = "羊先生"
   var getAge = function(){
   return 18;
}
test`我是,${myname},今年${getAge()}`

返回:

2.参数新特性

1.参数类型:

在参数名称后面使用冒号来指定参数的类型
var name :string = "羊先生" //再次赋值只能赋为字符串
var alias :any = "all" //any 阔以为字符赋任何类型
var age :bumber = "25" //再次赋值只能赋为数字
var man : boolean = true //再次赋值只能赋为布尔值
function test(): void{} //void申明函数没返回值
function test(): string{} //申明函数只能返回字符串类型
function test(name:string): string{} /给函数的参数也申明类型

除了阔以给变量申明类型还阔以给函数申明类型也阔以给函数的参数声明类型

2.自定义类型

class Person{
    name:string;
    age:number;
} 
var name : Person= new Person();
//如果你是用编辑器编写就会提示类型,作为开发来说是一个方便,也容易管理

3.参数默认值

function test(a:string,b:string,s:string = "C"){
    console.log(a)
    console.log(b)
    console.log(c)
}

test("A","B","C") //输出 A B C
test("A","B") //输出 A B C

注意:带默认值的参数声明在后面,因为在typescript中参数不传全,会抛出异常

4.可选参数

function test(a:string,b?:string,s:string = "C"){
    console.log(a)
    console.log(b)
    console.log(c)
}

test("A") //输出 A undefined C

注意:同理,可选参数声明在必选参数后面

5.操作符-无线参数

function test(...args){
    args.forEach(function(arg){
        consloe.log(arg)
    })
}

test(1,2,3) //输出 1 2 3

test(1,2,3,4,5) //输出 1 2 3 4 5

6.操作符-固定参数

function test(a,b,c){
   console.log(a)
   console.log(b)
   console.log(c) 
}
var args = [1,2]
test(...args) //输出 1 2 undefined 
var args2 = [4,5,6,7,8,9]
test(...args2) //输出 4 5 6

7.genertor函数

function* test(){
    console.log(1)
    yield;
    console.logg(2)
}
var fun1  = test();
fun1.next(); //使用next,输出 1
fun1.next(); //在调一次输出 2 
function* test(){
    while(true){
        yield Math.random()*1000
    }
}
var p = test()
var limitPrice = 15
var price = 100
while(price > limitPrice ){
   price  =  p.next().value
   console.log(`随机数${price}`) 
}
console.log(`跳出时随机数${price}`) 

随机输出:

8.析构表达式-对象

function test(){
    return{
        code:"100",
        peice:"1000",
        obj:{
            a:2000,
            b:3000
        }
    }
}
var {code,peice} = test()
console.log(code) //输出100
console.log(peice) //输出1000

var {code:codex,peice} = test()
console.log(codex) //输出100
console.log(peice) //输出1000

var {code,peice,obj} = test()
console.log(obj) //输出object对象

var {code,peice,obj:b} = test()
console.log(b) //输出3000

注意:解析的变量变量与函数返回的值相同

9.析构表达式-数组

var arr1 = [1,2,3,4]

var [number1,number2] = arr1 
console.log(number1) //输出 1
console.log(number2) //输出 2

var [,,number1,number2] = arr1 
console.log(number1) //输出 3
console.log(number2) //输出 4

var [number1,,,number2] = arr1 
console.log(number1) //输出 1
console.log(number2) //输出 4

var [number1,number2,...others] = arr1 
console.log(number1) //输出 1
console.log(number2) //输出 2
console.log(others) //输出 3 4

在函数中使用
function test([number1,number2,...others]){
    console.log(number1)
    console.log(number2)
    console.log(others)
}
test(arr1 )// 输出 1 2 [3,4]

析构表达式让你写更少的代码

3.箭头表达式

1.单行箭头:

 var foo = (arg1,arg2) => arg1 + arg2;
 //上述表达式相当于
 var foo = function (arg1, arg2) { return arg1 + arg2; };

2.无参数:

 var foo = () => {} 
 //以上表达式相当于
 var foo = function () {}

单个参数

var fn = x => x * x;

this指向

var obj = {
    birth: 1990,
    getAge: function () {
        var b = this.birth; // 1990
        var fn = () => new Date().getFullYear() - this.birth; // this指向obj对象
        return fn();
    }
};
obj.getAge(); // 25

使用箭头函数让代码更有可读性和理解

3.for in 和 for of

for in

var myArray=[1,2,4,5,6,7]
myArray.name="羊先生"
for (var index in myArray) {
  console.log(myArray[index]);
}

for of

var myArray=[1,2,4,5,6,7]
myArray.name="羊先生";
for (var value of myArray) {
  console.log(value);
}

for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值。
for of遍历的只是数组内的元素,而不包括数组的索引name

4.类

1.创建类

class Test{
    name;
    eat(){
        console.log("这是一个类")
    }
}

var p1  = new Test();
p1.name = "a"
p1.eat()

var p2  = new Test();
p2.name = "b"
p2.eat()

同样一个类里面可以new 多个实列,多个实列都有相同的属性和方法,只不过状态不同

访问控制符

class Test{
    private name;//申明私有属性
    public eat(){ //申明公有方法
        console.log("这是一个类")
    }
}

类的创建时,默认都是public
private 关键字申明私有,只有在类的内部才可使用
protected 受保护,只有在类的和类的子类使用

构造函数

class Test{
    name
    constructor(){
        this.name = "初始化name值"
    }
    上面的或者这样写=>
    //constructor(public name:string="初始化name值"){
    //   
    //}
    
    eat(){
        console.log(this.name)
    }
}

构造函数(constructor)只会调用一次

类的继承

//父类
class Test{
  constructor(public name:string){
      this.name = "初始化name值"
  }
  eat(){
     console.log("我是父类函数")       
  }    
}
//子类
class Pest extends Test{
  constructor(name:string,code:string){
      super(name);
  }
  tat(){
      super.eat() //super 调用父类的函数
  }
}
var p = new Pest("")
p.tat() //输出:我是父类函数

super 1.子类构造函数必须调用父类构造函数。2.super阔以来调用父类方法

泛型<>

var qsts : Array  = []
qsts[0] = new Test("")
qsts[1] = new Pest("")
//这个数组只能放Test类型的数据

接口 interface

interface ITest(){
    name:string,
    age:number
}
class Test(){
  constructor(public config:ITest){
     
  }  
}
var p1  = new Test({
    name:"羊先生",//这里定义的参数只能按照接口定义的来
    age:"18"
})

接口除了申明属性还阔以申明方法

interface ITest(){
    eat()
}
class Test extends ITest(){
 eat() 
}
class Pest extends ITest(){
 eat() 
}

*所有实现ITest接口定制的类必须实现eat()

模块
export:它是用来定义模块的,可以导出对象、函数、类、字符串等等:
mport :用来导入的也可以通过as改名:
注意:在平时开发中可能见到export default,那么export和export default的区别就是,前者导出的东西需要在导入的时候加{},而后者则不需要:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98394.html

相关文章

  • 前端周刊第59期:选 Flow 还是 TypeScript

    摘要:周末是时隔两月的家人团聚,而每次内容的准备平均需要我集中精力工作小时,所以第期的内容今早才准备好,对不住大家了。下面是本周精选内容,请享用。本文作者王仕军,商业转载请联系作者获得授权,非商业转载请注明出处。 showImg(https://segmentfault.com/img/remote/1460000009742537?w=1240&h=509); 周末是时隔两月的家人团聚,而...

    Julylovin 评论0 收藏0
  • 新上课程推荐:TypeScript完全解读(总26课时)

    摘要:本套课程包含两大部分,第一部分是基础部分,也是重要部分,参考官方文档结构,针对内容之间的关联性和前后顺序进行合理调整。 showImg(https://segmentfault.com/img/bVbpBA0?w=1460&h=400); 讲师简介: iview 核心开发者,iview-admin 作者,百万级虚拟渲染表格组件 vue-bigdata-table 作者。目前就职于知名互...

    caozhijian 评论0 收藏0
  • typescript - 一种思维方式

    摘要:怎么影响了我的思考方式对前端开发者来说,能强化了面向接口编程这一理念。使用的过程就是在加深理解的过程,确实面向接口编程天然和静态类型更为亲密。 电影《降临》中有一个观点,语言会影响人的思维方式,对于前端工程师来说,使用 typescript 开发无疑就是在尝试换一种思维方式做事情。 其实直到最近,我才开始系统的学习 typescript ,前后大概花了一个月左右的时间。在这之前,我也在...

    CKJOKER 评论0 收藏0
  • TypeScript - 一种思维方式

    摘要:怎么影响了我的思考方式对前端开发者来说,能强化了面向接口编程这一理念。使用的过程就是在加深理解的过程,确实面向接口编程天然和静态类型更为亲密。摘要: 学会TS思考方式。 原文:TypeScript - 一种思维方式 作者:zhangwang Fundebug经授权转载,版权归原作者所有。 电影《降临》中有一个观点,语言会影响人的思维方式,对于前端工程师来说,使用 typescript 开...

    noONE 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<