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

相关文章
|
6月前
|
JavaScript 前端开发 编译器
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
125 0
|
6月前
|
编解码 JavaScript 前端开发
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
319 0
|
6月前
|
JavaScript
TypeScript【类的继承、访问修饰符、readonly 修饰符、存取器、实例方法与静态方法、实例属性与静态属性、静态属性、抽象类】(三)-全面详解(学习总结---从入门到深化)
TypeScript【类的继承、访问修饰符、readonly 修饰符、存取器、实例方法与静态方法、实例属性与静态属性、静态属性、抽象类】(三)-全面详解(学习总结---从入门到深化)
64 0
|
2月前
|
JavaScript
typeScript基础(1)_原始数据类型学习
本文介绍了TypeScript中的原始数据类型,包括布尔型、数值型、字符串型、`void`、`null`和`undefined`,并展示了如何在TypeScript中声明和使用这些类型。同时,还介绍了如何通过`tsc`命令编译TypeScript文件。
48 4
|
1月前
|
JavaScript 索引
TypeScript(TS)安装指南与基础教程学习全攻略(二)
TypeScript(TS)安装指南与基础教程学习全攻略(二)
51 0
|
1月前
|
JavaScript 前端开发 安全
TypeScript(TS)安装指南与基础教程学习全攻略(一)
TypeScript(TS)安装指南与基础教程学习全攻略(一)
28 0
|
4月前
|
JavaScript 前端开发 安全
如何学习typescript?
【7月更文挑战第9天】1. 了解其为JavaScript超集,增加类型系统和ES6特性,提升代码安全性和效率。 2. 安装 TypeScript 全局 (`npm install -g typescript`),用`tsc -v`验证,或尝试在线的TypeScript Playground。 3. 学习类型注解、基础类型(如number、string、boolean等)、any与unknown,接口和类。 4. 探索高级特性,如泛型、模块&命名空间、装饰器。 5. 实践中巩固知识,如做小项目(如用React或Vue),阅读官方文档,参与社区讨论。持续编码和实践是关键。
34 0
|
6月前
|
JavaScript 前端开发 编译器
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)(下)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
57 0
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)(下)
|
6月前
|
JavaScript
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)(上)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
72 0
|
6月前
|
JavaScript 前端开发 编译器
TypeScript【可选属性、只读属性、额外的属性检查、函数类型、类类型、继承接口】(四)-全面详解(学习总结---从入门到深化)
TypeScript【可选属性、只读属性、额外的属性检查、函数类型、类类型、继承接口】(四)-全面详解(学习总结---从入门到深化)
70 0