TypeScript学习(2)

简介: 常量枚举只需要在枚举前面加const,会内联枚举,提高计算性能

常量枚举

只需要在枚举前面加const,会内联枚举,提高计算性能

const enum Direction{
    Up='UP',
    Down='DOWN',
    Right='RIGHT',
    Left='LEFT',
}
  • 泛型----generics
    泛型出现的动机和要解决的问题:
    在定义时没办法确定参数类型和返回类型的时候,在使用时才能确定
    可以简单理解为占位符,动态指定类型
function echo(arg:number){
  return arg
}
const result = echo(123)   // result is number
const result = echo('123') // result is string change arg is string
...

result无法随意匹配any类型

改造后:

function echo<T>(arg:T):T{        // 使用T作为参数占位
  return arg
}
const result:number = echo(123)
const result:string = echo('123')
const result:boolean = echo(true)

参数是一个数组的时候,加泛型

function swap<T,U>(tuple:[T,U]):[U,T]{
   return [tuple[1],tuple[0]]
}
const result2 = swap(['string',123])
result2[1] // number
result2[0] // string

对函数使用泛型加约束

Eg:

function echoWithArr<T>(arg:T):T{
  console.log(arg.length)
  return arg
}
// 会报错,因为T可能没有length,如果给T加约束
function echoWithArr<T>(arg:T[]):T[]{
  console.log(arg.length)
  return arg
}
// 改造成了传T类型的数组,错误取消,但是如果想判断字符串的length呢,如果是对象中含有length呢,上面的改造就不能实现了,继续改造
interface IWithLength{
  length:number;
}
function echoWithLength<T extends IWithLength>(arg:T):T{
   console.log(arg.length)
   return arg
}
const str = echoWithLength('str')
const obj = echoWithLength({length:12,width:'12'})
const arr = echoWithLength([1,2,3])
// 以上都可以满足,问题解决

对类使用泛型约束

class Queue<T>{
  private data = [];
  push(item:T){
    return this.data.push(item)
  }
  pop():T{
    return this.data.shift()
  }
}
const queue = new Queue<number>();
queue.push(1)
const queue2 = new Queue<string>();
queue.push('1')

对接口加泛型

interface KeyPair<T,U>{
  key:T;
  value:U;
}
let kp1:KeyPair<number,string> = {key:123,value="str"}
let kp2:KeyPair<string,number> = {key:"str",value="123"}

对数组加泛型

let arr:number[] = [1,2,3]
let arr2:Array<number> = [1,2,3,4]
interface IPlus<T> {  // 描述了一个函数的类型
  {a:T,b:T}: T
}
function plus(a:number,b:number){
  return a+b;
}
function connect(a:string,b:string){
  return a+b;
}
const a:IPus<number> = plus;
const b:IPus<string> = plus;
  • 类型别名和断言as
// 别名 type aliases
function sum(x;number,y:number):number {
return x+y
} 
const sum2:(x;number,y:number)=>number = sum
// sum2 太长,用类型别名
type PlusType = (x;number,y:number)=>number
const sum2:PlusType = sum
// 断言 as 分别判断不同类型的不同处理方式
function sum(input:string | number) :number {
   const str = input as String;
   if(str.length){
     return str.length
   }else{
      const number = input as Number;
      return number.toString().length
   }
} 
=>
function sum(input:string | number) :number {
   if((<string>input).length){
     return (<string>input).length
   }else{
      return input.toString().length
   }
} 
  • 声明文件
jQuery('#f00');

使用一

declare var jQuery:(selector:string)=>any

一般单独放在一个文件jQuery.t.ts 中声明,以.d.ts结尾

tsconfig.json

{
  "include":["**/ *]
}

使用二

第三方库

查找第三方库地址

npm install --save @types/jquery

studytypescript地址

标签:

TypeScript

相关文章
|
3月前
|
JavaScript 前端开发 编译器
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
66 0
|
3月前
|
编解码 JavaScript 前端开发
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
65 0
|
4月前
|
JavaScript
TypeScript【类的继承、访问修饰符、readonly 修饰符、存取器、实例方法与静态方法、实例属性与静态属性、静态属性、抽象类】(三)-全面详解(学习总结---从入门到深化)
TypeScript【类的继承、访问修饰符、readonly 修饰符、存取器、实例方法与静态方法、实例属性与静态属性、静态属性、抽象类】(三)-全面详解(学习总结---从入门到深化)
20 0
|
4月前
|
JavaScript 前端开发 编译器
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)(下)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
27 0
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)(下)
|
4月前
|
JavaScript
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)(上)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
32 0
|
4月前
|
JavaScript 前端开发 编译器
TypeScript【可选属性、只读属性、额外的属性检查、函数类型、类类型、继承接口】(四)-全面详解(学习总结---从入门到深化)
TypeScript【可选属性、只读属性、额外的属性检查、函数类型、类类型、继承接口】(四)-全面详解(学习总结---从入门到深化)
25 0
|
4月前
|
JavaScript 前端开发 程序员
TypeScript【枚举、联合类型函数_基础、函数_参数说明 、类的概念、类的创建】(二)-全面详解(学习总结---从入门到深化)
TypeScript【枚举、联合类型函数_基础、函数_参数说明 、类的概念、类的创建】(二)-全面详解(学习总结---从入门到深化)
19 0
|
4月前
|
JavaScript 前端开发 编译器
TypeScript【什么是TypeScript、安装并编译TypeScript、变量声明、原始数据类型、数组、元组、任意值】(一)-全面详解(学习总结---从入门到深化)
TypeScript【什么是TypeScript、安装并编译TypeScript、变量声明、原始数据类型、数组、元组、任意值】(一)-全面详解(学习总结---从入门到深化)
18 0
|
4月前
|
存储 JavaScript 前端开发
【第10期】学习TypeScript你要知道的JavaScript
【第10期】学习TypeScript你要知道的JavaScript
19 0
|
4月前
|
JavaScript 前端开发 安全
推荐12个值得学习的TypeScript宝库!
推荐12个值得学习的TypeScript宝库!