TypeScript基础小知识

TypeScript安装

npm install -g typescript

TypeScript介绍

1.ts文件直接书写js语法代码,html文件可直接引用ts文件,谷歌浏览器
可直接使用
2.ts文件存在ts语法代码,需要编译ts文件->js文件,html引入js文件使用
3.ts文件函数形参,需要某个类型进行修改->js文件中无改修饰类型
4.ts文件let -> js文件var

类型注解

轻量级的为函数或者变量添加的约束
不确定类型使用unknown

基础类型定义

function add(a: number, b: number): number {
  return a + b
}
let num10:number = 10; //十进制
let num2:number = 0b10101; //二进制0b
let num8:number = 0o12; //八进制0o
let num16:number = 0xaa; //十六进制0x
let s: string = 'xxx'
let b: boolean = true
let as: number | string = '5' // 联合类型
let varAny: any // 任意类型,若声明未赋值,则判断为any
varAny = 10 // any类型的变量,可以赋值给任意变量
let u: unknown // 未知类型,不能赋值给其他变量
u = 'xzp'

类型断言

s = u as string
s = <string>u

函数返回值void/never

// void 无返回值(返回值,则报错,可return)
function fn(): void {
  // return
}
// never 无返回结果
function fu(): never {
  throw new Error('xxx')
}

对象定义

// object 对象 不建议使用
let objError: object
objError = {}
objError = function () { }
// {} 指定对象包含属性
// 属性名?,属性可选
let obj: { name: string, age?: number }
// [propName:string]:any 属性类型为string,属性值任意,可以多个
let c: { name: string, [propName: string]: any }
let c1: { name: string, [xxx: number]: any }
c = { name: 'xzp', age: 18, sex:'xy' }

函数定义

let func: (a: number, b: number) => number
func = function (a: number, b: number): number {
  return a + b
}
// 可选参数,默认参数
const getName = function (fName: string = 'x', lName: string): string {
  if (lName) {
    return fName + lName
  }
  return fName
}
// 剩余参数
function showName(str: string, ...args: string[]) {
  console.log(str)
  console.log(args)
}
// 函数重载
function add(x: number, y: number): number
function add(x: string, y: string): string
function add(x: number | string, y: number | string): number | string {
  // 参数可以为两个数字或两个字符串
  return x + y
}

数组定义

let arrS: string[]
arrS = ['a', 'b']
let arrN: Array<number>
arrN = [1, 2, 3]
// 元组,固定长度的数组
let arrL: [string, number]
arrL = ['xzp', 25]

枚举定义 enum

enum sex {
  male = 0,
  female = 1
}
let person: { name: string, sex: sex }
person = {
  name: 'xzp',
  sex: sex.male
}
console.log(person.sex === sex.male);

总结补充

let objA: { name: string } & { age: number }
objA = { name: 'xzp', age: 25 }
type xx = string | number | boolean
let snb: xx
snb = 'xx'
snb = 16
snb = true

tsconfig.json配置

{
  "include": [ // 包含的文件目录
    "./src/**/*"
  ],
  "exclude": [ // 排除的文件目录
    "./scr/public"
  ],
  // "extends": "./config/base" 定义被继承的配置文件
  "compilerOptions": {
    // 指定ts编译为ES的版本
    // 'es3', 'es5', 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext'
    "target": "es5",
    // 模块化
    "module": "amd",
    // "lib": ["ES6", "DOM"] 指定项目使用的库
    // 指定编译后文件所在目录
    "outDir": "./dist",
    // 代码合并为单个文件
    "outFile": "./dist/app.js",
    // 是否编译js文件
    "allowJs": true,
    // 是否检查js语法
    "checkJs": true,
    // 是否移除注释
    "removeComments": true,
    // 是否生成编译文件
    "noEmit": true,
    // 存在错误不生成编译文件
    "noEmitOnError": true,
    // 是否启用严格模式(可检查隐式的any)
    "alwaysStrict": false,
    // 不允许不明确的this
    "noImplicitThis": true,
    // 严格检查空值
    "strictNullChecks": true,
    // 所有的严格检查的开关,建议true
    "strict": true
  }
}

类定义class

public->公有的,任何位置都可以访问
private->私有的,外部无法访问,子类也无法访问
protected->受保护的,外部无法访问,子类可以访问
readonly->外部与类方法均无法修改name,仅构造函数可以修改
static->静态的,类名.静态属性 访问/设置,static不可以修饰构造函数
class Person {
  name: string
  constructor(name:string){
    this.name = name
  }
  // 只读属性
  readonly sex: string = 'male'
  // 定义类的静态属性static(可直接通过类读取:Person.age
  static age: number = 25
  // 定义方法
  eat() {
    console.log('eat pig!');
  }
}

类的继承

// abstract 抽象类,仅可作为父类
// 可添加抽象方法
abstract class Animal {
  name: string
  constructor(name: string) {
    this.name = name
  }
  // 定义抽象方法,子类必须重写
  abstract say(): void
}
// 类的继承,子类拥有父类所有的属性与方法
// 子类可以添加父类没有的方法与属性,也可以重写父类属性与方法
// super.xxx()调用父类的方法
// 子类构造函数需要调用super(props)
class Dog extends Animal {
  age: number
  constructor(name: string, age: number) {
    super(name)
    this.age = age
  }
  run() {
    console.log(`${this.name}冲冲冲`);
  }
  say() {
    console.log('汪汪汪');
  }
}

接口定义与使用

接口可作为声明类型使用
接口限制类的结构
接口定义对象属性与结构,不赋值
// 接口可作为声明类型使用
interface mdIf {
  name: string
}
interface mdIf {
  say(): void
}
// 重名interface内容会合并
const obj: mdIf = {
  name: 'xxx',
  say() {
    console.log('xxx');
  }
}
// 定义类
class myClass implements mdIf {
  name: string
  private _age: number
  constructor(name: string) {
    this.name = name
  }
  // 私有属性通过函数get属性访问,set属性修改
  get age(): number {
    return this._age
  }
  set age(val: number) {
    if (val > 0 && val <= 150) {
      this._age = val
    }
  }
  say() {
    console.log('xxx');
  }
}

泛型(定义函数、接口、类不确定数据类型)

function getArr<T>(value: T, count: number): T[] {
  const arr: T[] = []
  for (let i = 0; i < count; i++) {
    arr.push(value)
  }
  return arr;
}
// 调用
const arr = getArr<number>(10, 5)
const arrStr = getArr<string>('xzp', 5)
// 多个泛型
function getMsg<K, V>(value: K, value2: V): [K, V] {
  return [value, value2]
}
// 泛型接口
interface ITest<T> {
  data: Array<T>;
  add: (t: T) => T;
  getId: (id: T) => T;
}
// 泛型类
class Person<T, K>{
  age: K
  eat: (x: T, y: T) => T
}
const p: Person<string, number> = new Person<string, number>()
p.age = 100;
p.eat = function (x, y) {
  return x + y
}
p.eat('饭', '菜')
// 泛型约束
interface ILength {
  length: number;
}
function getLen<T extends ILength>(x: T): number {
  return x.length
}

声明文件

import jQuery from 'jquery'
// 定义操作,也可以放在文件jQuery.d.ts文件
declare var jQuery:(selector:string)=>any
// 使用jQuery
jQuery('#xxx')

内置对象ES

let b:Boolean = new Boolean(1)
let n:Number = new Number(true)
let s:String = new String('xxx')
let d:Date = new Date()
let r:RegExp = /\.css$/
let e:Error = new Error('error msg')
const div:HTMLElement = document.getElementById('xzp')
const divs:NodeList = document.getElementByClass('xzp')
document.addEventListener('click',(event:MouseEvent)=>{})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值