TypesScript入门

1.ts环境配置

//安装命令
yarn add typescript --dev
//配置初始化
yarn tsc --init
//编译
yarn tsc

2.配置文件常用配置

target:转化为js时的标准
module:使用的模块规范
sourceMap:是否生成map.js文件
outDir:输出目录
rootDir:编译目录
strict:是否开启严格模式
lib:所使用的标准库,注释掉为默认标准库,dom和bom标准库和一为dom

3.标准类型

  • js的六种基本类型加void
  • symbol在转换模式为es5时会报错
const a:string='foo'

const b:number=3

const c:boolean = true

const d:void = undefined

const e:null = null
const f:undefined = undefined

const h:symbol= Symbol()

4.对象类型

  • 直接设置object类型代表处理原始类型以外的所有类型
const foo:object=function(){} //不会报错

const obj:{foo:number,bar:string} = {foo:5,bar:'sss'} //这种方式里面的对象键值必须和设置的一样,不能多也不能少

5.数组类型

const g:Array<number>=[0,1,2] // 数组里面元素类型只能是同一种类型
const i:number[] = [5,6,7] 

const h:Array<number|string>=[0,1,'sss']  //用|可以设置数组里面元素是多种类型

6.元组类型

const tump:[number,string]=[2,'dd'] //元组里面的数据类型必须和设置的一一对应 
const tump:[number,string]=['dd',2] //顺序不一样也会报错

7.枚举类型

  • 枚举类型可以通过值获取键 (置入双向键值对)
  • 常量枚举不可通过值获取键 (在enum前加const)
enum postStatus{
  draft=6,
  ahah=3
}
const enum constPostStatus{
  draft=6,
  ahah=3
}

8.函数类型

函数声明方式定义

function fun1(a:number,b:number):string{
  return '只能返回string'
}

fun1(2,2) //参数的个数和类型都必须与设置的一致

//可选参数
//1.冒号前加一个问号
//2.设置参数默认值
function fun2(a?:number,b:number=3):string{
  return '只能返回string'
}

//任意个数参数使用..rest
function fun1(a:number,b:number,...rest:number):string{
  return '只能返回string'
}

函数表达式方式

const fun3:(a: number, b: number) => string = function(a:number,b:number):string{
  return '只能返回string'
}

9.任意类型

function stringfy(value:any){
  return JSON.stringify(value)
}

10.隐式类型推断

只在声明时根据赋的值进行推断,如果只声明为赋值会推断为any类型

11.类型断言

const num = [1,2,3]
const res = num.find(i=>i>0)
// const square = res as square  因为ts不确定res是数字所以会报错
const square = res as number * (res as number)

//另一种方式是使用尖括号: 
<number>res   //jsx语法中无法使用

12.接口

interface Post{
  title:string
  content:string
  subtitle?:string //可选成员
  readonly summary:string //只读成员
}
function pointPost(post:Post){
  console.log(post.title)
  console.log(post.content)
}

pointPost({
  title:'接口的作用是用来约束对象中的成员的',
  content:'使用interface关键词定义接口,里面的参数可以用逗号分割,也可以用分号,分号可省略',
  summary:'设置后不可修改'
})

let testPost:Post = {
  title:'接口的作用是用来约束对象中的成员的',
  content:'使用interface关键词定义接口,里面的参数可以用逗号分割,也可以用分号,分号可省略',
  summary:'设置后不可修改'
}

//动态成员
interface Cache{
  [prop:string]:string
}

const cache:Cache={}
cache.poo='poo'

13.类

和es6中类的一些区别

  • 构造函数中的参数必须先定义并在定义时或者构造函数中赋值
  • 多了三个修饰符 ——public:共有属性,private:私有属性,protected:保护属性
  • 只读属性:readonly
class Person{
  public name:string
  private age:number //私有修饰符,只能在类的内部访问
  protected readonly gender:boolean //保护修饰符,只能在类的内部和子类中访问
  constructor(name:string,age:number){
    this.name=name
    this.age=age
    this.gender=true
  }
}
const tom =new Person('tom',18)

class Student extends Person {
  //构造器上设置私有属性private,就不能在外部被new生成实例和继承了。
  //设置成保护属性protected,不能new可以继承
  private constructor(name:string,age:number){
    super(name,age)
    console.log(this.gender)  //子类中可以访问父类的保护类型
  }
 //static是代表静态方法
  static create(name:string,age:number){
    return new Student(name,age)
  }
}

const jack =Student.create('jack',18)

在类中表明实现了哪种接口的方式

使用implements关键字

interface Eat{
  eat(food:string):void
}
interface Run{
  run(distance:string):void
}
class Animal implements Eat,Run{
  eat(food:string){
    console.log(food)
  }
  run(dd:string){
    console.log(dd)
  }
}

抽象类

在class关键字前加一个abstract 关键字,抽象类只能被继承不可创建实例,在自己抽象类内部new也是不允许的

abstract class Person{
  public name:string
  private age:number //私有修饰符,只能在类的内部访问
  protected gender:boolean //保护修饰符,只能在类的内部和子类中访问
  constructor(name:string,age:number){
    this.name=name
    this.age=age
    this.gender=true
  }
  static create(name:string,age:number){
    return new Person(name,age)   //报错
  }
}
const tom =new Person('tom',18)  //报错

14.泛型和类型声明

泛型:使用尖括号在函数名后定义泛型,解决函数参数不确定类型的情况,在调用函数时用简括含传参

function Tname<T>(name:T) {
  console.log(name)
}
Tname<string>(666) //报错
Tname<string>('haha')

类型声明
使用declare声明未定义类型的函数

 import {camelCase} from 'lodash'
declare function camelCase(input:string) {
  
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,049评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,478评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,109评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,097评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,115评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,280评论 1 279
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,748评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,398评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,553评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,440评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,487评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,176评论 3 317
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,750评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,821评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,049评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,559评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,150评论 2 341