文章目录

  • 简介
  • 为什么会有TypeScript?
  • JavaScript 与 TypeScript 的区别
  • TypeScript优势
  • TypeScript安装、编译
  • 配置TS开发工具 Vscode自动编译 .ts文件
  • 三、TypeScript数据类型及理解
  • 四、函数
    • 函数声明法
    • 匿名函数法
    • 没有返回值
    • 方法传参---可选参数
    • 方法传参---设置默认参数
    • 剩余传参---即 es6 中的 ... 语法
    • 函数重载
    • 箭头函数---和 es6 一样
    • 基本语法
    • 类的继承
    • 修饰符
    • Get/Set访问器
    • 静态属性
  • 接口
    • 基本语法
    • 继承接口
  • 泛型
    • 介绍
    • 泛型函数
    • 泛型类
    • 泛型接口

简介

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

为什么会有TypeScript?

JavaScript 只是一个脚本语言,并非设计用于开发大型 Web 应用,JavaScript 没有提供类和模块的概念,而 TypeScript 扩展了 JavaScript 实现了这些特性。TypeScript 主要特点包括:

  • TypeScript 是微软推出的开源语言,使用 Apache 授权协议
  • TypeScript 是 JavaScript 的超集.
  • TypeScript 增加了可选类型、类和模块
  • TypeScript 可编译成可读的、标准的 JavaScript
  • TypeScript 支持开发大规模 JavaScript 应用
  • TypeScript 设计用于开发大型应用,并保证编译后的 JavaScript 代码兼容性
  • TypeScript 扩展了 JavaScript 的语法,因此已有的 JavaScript 代码可直接与 TypeScript 一起运行无需更改
  • TypeScript 文件扩展名是 ts,而 TypeScript 编译器会编译成 js 文件
  • TypeScript 语法与 JScript .NET 相同
  • TypeScript 易学易于理解

JavaScript 与 TypeScript 的区别

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

TypeScript优势

解决痛点
TypeScript的设计解决了JavaScript的“痛点”:弱类型和没有命名空间;这导致程序很难模块化,不适合开发大型程序。

语法提示
编写程序时,编辑器将提供精准的语法提示,以帮助大家更方便地实践面向对象的编程。

容易上手
TypeScript的一个设计亮点,是它并没有抛弃JavaScript的语法另起炉灶,而是做成了JavaScript的超集,任何合法的JavaScript的语句在TypeScript下都是合法的,且沿用了JavaScript的使用习惯和惯例,可以说学习成本很低。

TypeScript安装、编译

npm install -g typescript

或者

cnpm install -g typescript

或者

yarm global add typescript

查看版本:

tsc -v

运行:

tsc helloworld.ts

注意:如果电脑上没有安装过yarn,请记得先安装

配置TS开发工具 Vscode自动编译 .ts文件

  1. 在目录所在位置打开终端cmd
tsc --init

生成配置文件
2. 然后取消生成的 tsconfig.json 中的 “outDir”,改为如下:

3. 点击终端,选择typescript.选择监视选项

4. 可以开始正常敲代码

三、TypeScript数据类型及理解

  1. 布尔类型(boolean)
  2. 数字类型(number)
  3. 字符串类型(string)
  4. 数组类型(array)
  5. 元组类型(tuple)
  6. 枚举类型(enum)
  7. 任意类型(any)
  8. null 和 undefined(是never 数据类型的子类型)
  9. void 类型
  10. never 类型:
    a. 表示的是那些永不存在的值的类型,never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never 类型(除了never本身之外)。 即使 any也不可以赋值给never。
    b. 是其他类型(包括 null 和 undefined)的子类型,代表从不会出现的值。
    c. 返回never的函数必须存在无法达到的终点

四、函数

函数声明法

function run():string{return 'run'
}

匿名函数法

let fun2=function():number{return 2;
}
alert(fun2());let getInfo1=function (name:string,age:number):string {return `${name}--${age}`
}
alert(getInfo1('zhangdan',3434))

没有返回值

function getInfo3(name:string,age:number):void {console.log(`${name}--${age}`)
}
getInfo3('lixiaolong',3434)

方法传参—可选参数

注意:可选参数必须放在必须参数的后面

// es5中的实参和形参可以不一样,但是ts中必须一样,否则就需要配置可选参数
function getInfo4(name?:string,age?:number):string {return `${name}--${age}`
}
alert(getInfo4('3453'))
alert(getInfo4('',34))

方法传参—设置默认参数

用户可以不传递这个参数或传递的值是undefined
注意:与普通可选参数不同的是,带默认值的参数不需要放在必须参数的后面。 如果带默认值的参数出现在必须参数前面,用户必须明确的传入 undefined值来获得默认值
function getInfo5(name?:string,age:number=20):string {return `${name}--${age}`
}
alert(getInfo5('3453453',))

剩余传参—即 es6 中的 … 语法

函数重载

// Java中的重载是指两个或两个以上同名函数,但是他们的参数不一样,这时会出现函数重载的情况
// ts为了兼容es5 es6,重载方法和Java有区别// 在es5中,如果出现同名函数,则下面的会替换上面的方法
// function name(params:any):any {// }
// function name(params:any,config:any) {// }// ts中
function getInfo6(names:string):string;
function getInfo6(age:number):string;
function getInfo6(str:any):any{if (typeof str==='string') {return names}else{return str}
};
alert(getInfo6(20))

箭头函数—和 es6 一样

setTimeout(() => {alert(3333)
}, 1000);

基本语法

// 通过class创建类
class Animal {// 类的属性name: string;// 类的构造器constructor(name: string) {this.name = name;}// 类的方法sayHello():void{alert("hello animal:"+this.name);}
}
// 实例化类
var tom = new Animal("tom");
tom.sayHello();

类的继承

// 通过class创建类
class Animal {// 类的属性name: string;// 类的构造器constructor(name: string) {this.name = name;}// 类的方法sayHello(): void {alert("hello animal:" + this.name);}
}// 继承Animal
class Cat extends Animal {// 重写方法sayHello(): void {alert("hello cat:" + this.name);}
}class Dog extends Animal {sayHello(): void {alert("hello dog:" + this.name);}
}

修饰符

class Animal {private name: string; // 这里把name修饰符改为privateconstructor(name: string) {this.name = name;}sayHello(): void {alert("hello animal:" + this.name);}
}class Cat extends Animal {sayHello(): void {alert("hello cat:" + this.name); //这里会报错,因为无法引用父类private修饰的属性}
}class Dog extends Animal {sayHello(): void {alert("hello dog:" + this.name); //这里会报错,因为无法引用父类private修饰的属性}
}

Get/Set访问器

class Animal {private name: string;get name(): string { //通过get和set解决子类不能引用父类private修饰的属性的问题return this.name;}set name(name: string) {this.name = name;}constructor(name: string) {this.name = name;}sayHello(): void {alert("hello animal:" + this.name);}
}class Cat extends Animal {sayHello(): void {alert("hello cat:" + this.name); }
}class Dog extends Animal {sayHello(): void {alert("hello dog:" + this.name); }
}

静态属性

class Table {static width: Number = 100;static height: Number = 50
}var width: Number = Table.width;

接口

基本语法

interface Graphic {width: Number;height: Number;
}class Square implements Graphic {width: Number;height: Number;constructor() {this.width = 100;this.height = 100;}constructor(width: Number, height: Number) {this.height = height;this.width = width;}
}

继承接口

interface Graphic {width: Number;height: Number;
}interface PenStroke {penWidth: Number;
}interface Square extends Graphic, PenStroke {sideLength: number;
}

泛型

介绍

软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。
在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。
通俗理解:泛型就是解决类、接口、方法的复用性以及对不特定数据类型的支持

泛型函数

function getDate<T>(value: T): T {console.log('3453453453');return value;
}
getDate<number>(345345);   // 3453453453
getDate<string>('String')  // 3453453453function getDate1<T>(value: T): any {console.log(value);  // 345345return value + '345345345';
}
alert(getDate1<number>(345345));   // 345345345345345

泛型类

class Minclass<T>{public list: T[] = []add(value: T) {this.list.push(value)}min(): T {let minest = this.list[0];for (let i = 0; i < this.list.length; i++) {if (minest > this.list[i]) {minest = this.list[i]}}return minest}
}let ert = new Minclass<number>()
ert.add(34)
ert.add(89)
ert.add(56)
ert.add(67)
ert.add(23)
ert.add(16)
ert.add(79)
alert(ert.min())let strs = new Minclass<string>()
strs.add('bc')
strs.add('dfgd')
strs.add('erf')
strs.add('zdf')
strs.add('abcd')
alert(strs.min())

泛型接口

// 写法一
interface configFn {<T>(confg: T): T
}
let getData: configFn = function <T>(value: T): T {return value;
}
getData<number>(34)// 写法二
interface config4<T> {(config: T): T
}
function getData2<T>(value: T): T {return value;
}
let test: config4<string> = getData2
test('sdfsdf')

TypeScript学习日记相关推荐

  1. RUST直接升钢指令_[译]参照TypeScript学习Rust-part-1

    [译]参照TypeScript学习Rust-1 · 前端在线​regx.vip 对于前端,笔者比较认可Rust作为前端开发技术栈投资的,本文系列翻译旨在分享.学习Rust这门语言. Rust常常被认为 ...

  2. TypeScript学习笔记3:运算符

    TS 和 JS 相对比的优势 TypeScript的安装步骤.运行问题及代码的简单运行 TypeScript学习笔记1:变量赋值及书写方式 TypeScript学习笔记2:数据类型 文章目录 运算符 ...

  3. TypeScript学习笔记2:数据类型

    TS 和 JS 相对比的优势 TypeScript的安装步骤.运行问题及代码的简单运行 TypeScript学习笔记1:变量赋值及书写方式 TypeScript学习笔记2:数据类型 文章目录 数据类型 ...

  4. TypeScript学习笔记1:变量赋值及书写方式

    TS 和 JS 相对比的优势 TypeScript的安装步骤.运行问题及代码的简单运行 TypeScript学习笔记1:变量赋值及书写方式 TypeScript学习笔记2:数据类型 文章目录 变量赋值 ...

  5. java的圆周率_java学习日记,圆周率的打印

    前段时间看到听说学习java每天写技术贴会对自己提升很大,我现在学习java也就2个周,算不上技术贴,就写写学习日记吧. 昨天师傅给我出了一道题,说是试试用java打印圆周率. 刚开始我的思路是,如果 ...

  6. GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考

    GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考 标签: cuda存储线程结构网格 2012-12-07 16:30 6298人阅读 评论(4)收藏 举 ...

  7. GPU(CUDA)学习日记(十三)------ CUDA内存简介

    GPU(CUDA)学习日记(十三)------ CUDA内存简介 标签: cuda存储线程结构 2012-12-07 16:53 2902人阅读 评论(0)收藏 举报 分类: GPU(16) CUDA ...

  8. GPU(CUDA)学习日记(九)------ CUDA存储器模型

    GPU(CUDA)学习日记(九)------ CUDA存储器模型 标签: cuda存储bindingcache编程api 2012-09-27 10:53 1677人阅读 评论(1) 收藏 举报 分类 ...

  9. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  10. typescript 接口 java_[Java教程]【TypeScript】TypeScript 学习 2——接口

    [Java教程][TypeScript]TypeScript 学习 2--接口 0 2015-06-19 12:00:28 在 TypeScript 中,接口是用作约束作用的,在编译成 JavaScr ...

最新文章

  1. Redis 分布式锁如何自动续期
  2. java1.8 类库_Commons Configuration 1.8发布 配置管理Java类库
  3. 计划工程师dadafksjh
  4. 字符串所有排列组合暴力递归
  5. 对象复制的7种方法,还是Spring的最好用!
  6. 小哥哥你有98K吗?利用Python制作一款多功能变声器!
  7. JQMObile 优势
  8. java加载图片白屏,tomcat白屏~
  9. Turbo码:3GPP TS 36.212
  10. 如果不交社保,每月都存500元,存15年够自己养老用吗?
  11. Oracle数据库中scott用户不存在的解决方法
  12. 《墨子》 —— 兼爱与非攻
  13. android 录屏自动运行,Android录屏+视频转Gif实现
  14. 高通平台文档下载【学习笔记】
  15. 数控弯管机xyz转换ybc的算法_一种弯管数控数模到CAD数模转换的方法与流程
  16. 自动化测试框架的Step By Step搭建及测试实战(1)
  17. 线上拼团活动方案怎么制作设计?
  18. 【总结】斜杠/和反斜杠\ 的区别
  19. CodeForces 1098D. Eels
  20. python求平均值

热门文章

  1. 单细胞测序数据挖掘与课题设计
  2. 6.0系统xposed框架安装流程
  3. julia 编程语言_Julia(Julia)编程语言入门
  4. EDI X12 标准报文清单
  5. Visio 连线 取消自动附着,取消自动捕捉
  6. ASP.NET MVC+Vue.js实现联系人管理
  7. Affinity Propagation
  8. python中shift函数_Python numpy.left_shift函数方法的使用
  9. 程序媛:我的痘痘不让我编程
  10. 2020.07-Study_update.5