typescript

TS:TypeScript 简单入门

2021-09-13  本文已影响0人  limengzhe

本文首发于 TS:TypeScript 简单入门

什么是 Typescript

TypeScript 是 JavaScript 的超集。它基于 JavaScript 的类型定义提供了一个更加强大,更加灵活类型系统。目前由微软进行维护和管理。

基本类型

对象类型

对象是所有其他类型的超集,包括那些不可枚举的对象。要定义一个对象类型,只需列出它的属性及其类型即可,或者可以使用 object

let person: {
  name: string
  age: number
}

let obj: object

OK

person = {
  name: "Tom",
  age: 10,
}

obj = { 1: "1", a: { b: "b" }, c: [1, 2, 3] }

报错

person = {
  name: "Tom",
  age: "10",
} // Type 'string' is not assignable to type 'number'.

obj = 1 // Type 'number' is not assignable to type 'object'.

特殊类型(any、unknown、void、never)

联合类型

联合类型(Union Types)表示取值类型可以为多种类型中的一种。

let myFavoriteNumber: string | number
myFavoriteNumber = "seven" // OK
myFavoriteNumber = 7 // OK

类型别名和接口

当类型的定义较为复杂时或者需要复用时,可以给类型设置一个别名(Type Aliases),或者使用接口(Interface)定义。

type Animal = {
  name: string
}

const cat: Animal = { name: "Tom" }

等价于

interface Animal {
  name: string
}

const cat: Animal = { name: "Tom" }

可以通过下面方式实现类型和接口的继承

type Bear = Animal & {
  honey: boolean
}

interface Bear extends Animal {
  honey: boolean
}

不过二者并不是完全相同的,类型别名不允许重复定义,而接口可以重复定义,并实现继承。

OK

interface Animal {
  name: string
}

interface Animal {
  age: number
}

const cat: Animal = { name: "Tom", age: 2 }

报错

type Animal = {
  name: string
}

// Duplicate identifier 'Animal'.
type Animal = {
  age: number
}

类型断言

有时候会遇到 TypeScript 无法识别的值类型信息,但你清楚知道它具有某种类型时,你可以用 as 操作符来进行类型断言。

let someValue: any = "this is a string"
let strLength: number = (someValue as string).length

或者使用尖括号语法(除非代码在.tsx 文件中),与 as 是等价的

let someValue: any = "this is a string"
let strLength: number = (<string>someValue).length

在函数中进行使用类型检查

枚举

枚举是 TypeScript 对 JavaScript 语言运行时添加的一个特性。可以用来描述一组常量。

其他不常用类型

如何将 TypeScript 编译为 JavaScript ?

  1. 全局安装 typescript

    npm i -g typescript
    
  2. 使用 tsc 命令将 TypeScript 文件编译为 JavaScript。

    tsc javascript.js
    
  1. 安装 typescript 和 ts-loader

    npm i typescript ts-loader -D
    
  2. 在 webpack.config.js 中配置 ts-loader

    module.exports = {
      module: {
        rules: [
          {
            test: /\.tsx?$/,
            use: "ts-loader",
            exclude: /node_modules/,
          },
        ],
      },
    }
    
  3. 在根目录配置 tsconfig.json,用于指定编译项目所需的根目录下的文件以及编译选项。

    {
      "compilerOptions": {
        "module": "esnext", // 模块类型
        "target": "es5", // 指定编译目标
        "lib": ["esnext"] // 指定引入的库
      },
      "include": ["src/**/*"], // 指定编译的文件
      "exclude": ["node_modules"] // 排除编译的文件
    }
    

    更多配置项参考:https://www.typescriptlang.org/docs/handbook/tsconfig-json.html


参考资料:

上一篇下一篇

猜你喜欢

热点阅读