TypeScript

  • 入门
    • 使用
    • 数据类型
      • 基本数据类型
    • TS新增类型
    • 类型断言
    • TS class类
    • 接口 interface
      • 属性类接口
      • 函数类型接口
      • 类类型接口
      • 接口的继承

入门

类型检测,相比javascript,在TS中允许你为变量指定类型,有更多语法提示。

类型注解:变量后跟 :number,string等数据类型,约定了什么类型,就只能给变量赋值该类型的值,否则,就会报错

使用

安装:npm install -g typescript

编译:tsc xxx.ts

热编译:tsc -w xxx.ts

初始化:tsc --init

数据类型

基本数据类型

布尔值

let isDone:boolean = false;

数字

let sun:number = 1;

字符串

let str:string = “string”;
let sentence: string = `Hello, my name is ${ name }.

数组

let arr: Array<number> = [1,2];//允许数组内有数值
let a: [string] = ['1']; // 只允许数组内有1个字符串
let a1: string[] = ['1','2'];//只允许数组内有字符串
let b: any[] = [1,'2', {name:1}];//允许数组内有任意值

Null undefined

默认情况下null和undefined是所有类型的子类型

然而,当你指定了--strictNullChecks标记,nullundefined只能赋值给void和它们各自。

TS新增类型

元组 Tuple

元组类型允许表示一个已知元素数量和类型的数组,
各元素的类型不必相同。
let x: [string, number];  // 数组有两个元素,类型为字符串,数字x = ['hello', 10]; // OKx = [10, 'hello']; // Error//超出元组定义的值,只有类型允许的才可接受
//我们称其为联合类型
x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toStringx[6] = true; // Error, 布尔不是(string | number)类型

枚举 enum

枚举类型可以为一组数值赋予友好的名字。

enum Color { red,green=2,blue=4};
let arr:Color=Color;
console.log(arr);
//元素标号(下标)默认从0开始
//{0: 'red', 2: 'green', 4: 'blue', red: 0, green: 2, blue: 4}// 你可以根据下标获取元素,也可以反之用值获取其标示
console.log(arr[2]); // green
console.log(arr['green']);//2

任意值 any

any代表它可以是任意类型,在不清楚变量的类型时可以使用。

let Any: any = 123;
Any = '123';
Any = false;// 包含任意类型的数组
let Arr: <any> = [1,'2',true];

空值 void
void类型像是与any类型相反,它表示没有任何类型。 当一个函数没有返回值时,你通常会见到其返回值类型是void

function fn(e): void {console.log('没有返回值');
}//只能为它赋予undefined和null
let v:void = null;

Never
never类型表示的是那些永不存在的值的类型(抛出错误)

never类型是任何类型的子类型,也可以赋值给任何类型;

然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使any也不可以赋值给never。

// 返回never的函数必须存在无法达到的终点
function error(message: string): never {throw new Error(message);
}// 推断的返回值类型为never
function fail() {return error("Something failed");
}// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {while (true) {}
}

类型断言

相当于告诉编译器,
“相信我,我知道自己在干什么”
“你不要帮我检查了, 相信我,它就是这个类型”
(通过原本不被通过的类型赋值)

函数

function 函数名(参数列表): 返回值类型 {函数体 ...[return 返回值;]
}//可选参数 ?: 代表参数可不传。可选参数必须配置到参数的最后面
function fn(str:string,arr?:number):string {return xxx;
}

TS class类

  1. 类的定义
class Person {name: string;//属性,前面省略了public关键词constructor(n: string) {//构造函数,实例化类的时候触发的方法this.name = n;//使用this关键字为当前类的name属性赋值}run(): void {//方法console.log(this.name+ "在跑步");}
}var p = new Person("张三");
p.run();
  1. 类的继承

    类的继承:在 TypeScript 中要想实现继承使用 extends 关键字,只要一旦实现了继承关系,那么子类中便拥有了父类的属性和方法,而在执行方法过程中,首先从子类开始找,如果有,就使用,如果没有,就去父类中找。类的继承只能单向继承。

class Person {name: string;//父类属性,前面省略了public关键词constructor(n: string) {//构造函数,实例化父类的时候触发的方法this.name = n;//使用this关键字为当前类的name属性赋值}run(): void {//父类方法console.log(this.name + "在跑步");}
}//中国人这个类继承了人这个类
class Chinese extends Person {age: number;//子类属性constructor(n: string, a: number) {//构造函数,实例化子类的时候触发的方法super(n);//使用super关键字调用父类中的构造方法this.age = a;//使用this关键字为当前类的age属性赋值}speak(): void {//子类方法super.run();//使用super关键字调用父类中的方法console.log(this.name + "说中文");}
}var c = new Chinese("张三", 28);
c.speak();
  1. 修饰符

TypeScript 在class类里面定义属性的时候给我们提供了 三种修饰符

public:公有类型,在当前类里面、子类、类外面都可以访问
protected:保护类型,在当前类里面、子类里面可以访问,在类外部没法访问
private:私有类型,在当前类里面可以访问,子类、类外部都没法访问

      注意:如果属性不加修饰符,默认就是公有(public)。
  1. 静态属性

被静态修饰符修饰的属性就是静态属性,静态属性可以通过类名直接调用。

class Person {name: string;//属性,前面省略了public关键词static sex: string = "男";//被静态修饰符static修饰的属性constructor(n: string) {//构造函数,实例化类的时候触发的方法this.name = n;}run(): void {//方法console.log(this.name+ "在跑步");}
}console.log(Person.sex);
  1. 静态方法

静态方法:被静态修饰符修饰的方法就是静态方法,静态方法可以通过类名直接调用,但是在静态方法内部,不能直接调用当前类的非静态属性、非静态方法。

class Person {name: string;//属性,前面省略了public关键词static sex: string = "男";//被静态修饰符static修饰的属性constructor(n: string) {//构造函数,实例化类的时候触发的方法this.name = n;}run(): void {//方法console.log(this.name + "在跑步");}static print(): void {//被静态修饰符static修饰的方法// console.log('姓名:' + this.name);//错误console.log('性别:' + Person.sex);//正确// this.run();//错误}
}Person.print();
  1. 抽象类

抽象类
TypeScript 中的抽象类:它是提供其他类继承的基类,不能直接被实例化。

用abstract关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类(也就是其子类)中实现,abstract抽象方法只能放在抽象类里面。

我们常常使用抽象类和抽象方法用来定义标准。

//动物抽象类,所有动物都会跑(假设),但是吃的东西不一样,所以把吃的方法定义成抽象方法
abstract class Animal {name: string;constructor(name: string) {this.name = name;}abstract eat(): any;//抽象方法不包含具体实现并且必须在派生类中实现run() {console.log(this.name + "会跑")}
}class Dog extends Animal {constructor(name: string) {super(name);}eat(): any {//抽象类的子类必须实现抽象类里面的抽象方法console.log(this.name + "吃骨头");}
}var d: Dog = new Dog("小狼狗");
d.eat();class Cat extends Animal {constructor(name: string) {super(name);}eat(): any {//抽象类的子类必须实现抽象类里面的抽象方法console.log(this.name + "吃老鼠");}
}var c: Cat = new Cat("小花猫");
c.eat();

接口 interface

接口的用途就是:
对行为和动作进行规范和约束,规定这批类里必须提供某些方法,变量需为何种类型;
但是,接口中不能有方法体,只允许有方法定义。

属性类接口


//对传入对象的属性约束,以下这个是一个属性接口
interface FullName {firstName: string;secondName: string;
}function printName(name: FullName) {console.log(name.firstName + "--" + name.secondName);
}//传入的参数必须包含firstName、secondName
var obj = {age: 20,firstName: '张',secondName: '三'
};
printName(obj);//正确
// printName("1213");//错误

函数类型接口

//加密的函数类型接口
interface encrypt {//约束传参及返回值(key: string, value: string): string;
}var md5: encrypt = function (key: string, value: string): string {//模拟操作return key + "----" + value;
}
console.log(md5("name", "zhangsan"));

类类型接口

interface Animal {name: string;eat(str: string): void;
}//类接口需要 implements 关键字
class Dog implements Animal {name: string;constructor(name: string) {this.name = name;}eat() {console.log(this.name + "吃大骨头");}
}var d = new Dog("小狼狗");
d.eat();

接口的继承

接口可以继承接口,接口之间和抽象类之间的继承都是单向单继承,但是实现接口的子类可以实现多个接口。

简单来说,对于类、抽象类、接口继承只能单继承,但接口却可以多实现。


//人这个接口
interface Person {eat(): void;
}//程序员接口
interface Programmer extends Person {code(): void;
}//小程序接口
interface Web {app(): void;
}//前端工程师
class WebProgrammer implements Person, Web {public name: string;constructor(name: string) {this.name = name;}eat() {console.log(this.name + "下班吃饭饭")}code() {console.log(this.name + "上班敲代码");}app() {console.log(this.name + "开发小程序");}
}var w = new WebProgrammer("小李");
w.eat();
w.code();
w.app();

TS - 勉强入个门儿相关推荐

  1. 头条用户人均985,月入过万?看完真实的数据可视化,我有了答案

    看见一个问题: 我刷知乎不多,但是也有这个感觉:211凑合,985一般,清北还行.常青藤,勉强入眼,年薪百万算个屁,月入千万有点低. 好吧,我不知道是谁飘了,我只知道随便敲敲键盘确实很简单. 其实也不 ...

  2. 大数据常见面试问题汇总

    目录 第1章 核心技术 1.1 Linux&Shell 1.1.1 Linux常用高级命令 1.1.2 Shell常用工具及写过的脚本 1.1.3 Shell中单引号和双引号区别 1.2 Ha ...

  3. 为TypeScript项目生成API文档

    为TypeScript项目生成文档 使用typedoc为TypeScript项目生成API文档. 1. 使用typedoc生成HTML文档 需要安装 typedoc. npm i typedoc 可以 ...

  4. 百度前端技术学院2017学习总结

    一.前言 百度的前端技术学院IFE,2016年就听说了,当时自己也报名,还组成队伍了,不过自己一个任务也没完成就结束了,遗憾... 关注了IFE,知道2017年2月有新的一期培训,于是一直在等着报名, ...

  5. iphone双卡_单卡 iPhone 变双卡,3分钟搞定安卓备用机短信——IFTTT妙用

    〇.前言 虽然双卡手机在天朝早已遍地开花,甚至 iPhone 都在 2018 年支持了双卡,我使用的依然是单卡手机,而且是两部.它们虽然都是好几年前的手机了,但依然「够用」,所以我一直无缘新的双卡手机 ...

  6. 有哪些道理是我当了程序员后才知道的?

    1.当你明白了技术永远是为了业务服务的时候,不再技术至上的时候,你就成长到程序员的下一个阶段了. 2.业务第一,产品第二,技术第三. 3.盈利了,是业务部门把钱搞来的,技术部门是支出部门. 4.年轻的 ...

  7. 大一的一些心得与近况

    下周就离开北方,从沈阳飞西安 大一结束了,要填的坑太多了,总觉得要总结一下才能踏实的继续学下去 你会选择诗与远方,还是会选择柴米油盐? 而我还在苟且学习web安全,风雨兼程 总想着认真记录博客,可好久 ...

  8. Linux学习命令总结个人及个人心得

    在开始今天的讲课,我们还是一如既往的回顾下前面我们讲解的内容.前面我讲解了Linux的12类命令,及三剑客与正则表达式.他是我们学会Linux的基础,大家一定要下功夫把他们掌握了,今天我们说下Linu ...

  9. 零基础学python大概要多久-零基础学Python要多久

    随着Python就业的逐渐火热,我们会看见很多转行零基础学Python编程开发拿上万月薪的新闻,这让很多IT专业甚至非IT专业的同学蠢蠢欲动,想自己也去尝试一下.但是在转行学习Python之前,同学们 ...

  10. mx250显卡天梯图_MX250和150差别大吗?MX250和MX150区别对比 (全文)

    NVIDIA早在17年的时候,推出了MX150显卡,主要用于高性能轻薄本,兼顾续航与一般的游戏性能,在低画质下可以勉强吃鸡.时隔两年,新一代MX250显卡正式发布,同样是定位"高性能轻薄本& ...

最新文章

  1. html设置正则表达式,html 正则表达式
  2. 360前端星学习笔记-深入CSS
  3. Python中的reduce
  4. php屏幕抓取,关于屏幕抓取:如何在PHP中实现Web scraper?
  5. 博客搜索引擎索引博文数量分析与评估
  6. rip协议的V1和V2的更新机制
  7. 解决vue中路由跳转同一个路径报错
  8. 12如何隐藏dock栏_一键隐藏 iPhone 刘海和底部 Dock 栏,简洁又好看
  9. 雅迪发布高端智能电动车G5 这个售价真的会有人买吗?
  10. JVM程序计数器,虚拟机栈,本地方法栈
  11. java 管程通信_Java多线程07_线程通信之管程法与信号灯法
  12. ios ffmpeg+libx264
  13. 创造or变革:卡萨帝为何能重塑高端品质生活?
  14. Leetcode452. 用最少数量的箭引爆气球(排序+贪心)
  15. flash写保护原理_Flash存储原理
  16. 微信小程序获取手机号和OPENID
  17. 外文论文查重怎么查?
  18. CAD创建以及自动加载脚本文件*scr
  19. WP-南邮CTF逆向第三题 Py交易
  20. diffuse、specular贴图的光照

热门文章

  1. go的目录结构pkg
  2. little endian c语言,endian.h这个头文件里面的宏可以直接用么?
  3. 10-5 查询选修张老师讲授所有课程的学生
  4. Unity提取模型动画
  5. 改进ur_modern_driver包,提供ur_driver/URScript_srv服务
  6. android 4.4 cts测试,android之CTS兼容性测试及FAIL issue
  7. lua在线手册 lua在线lua学习教程 lua参考手册中文翻译
  8. 【建议收藏】1000套HTML静态网页设计期末大作业 (HTML+CSS+JS)
  9. 用k-mer分析进行基因组调查:(二)用jellyfish进行k-mer频数统计
  10. 学习使用php的stripslashe()函数去除反斜杠