typescript | 了解typescript + 搭建typescript开发环境 +类型声明 + 编译选项 + 使用webpack打包ts代码 +Babel

TypeScript简介

  1. TypeScript是JavaScript的超集。
  2. 它对JS进行了扩展,向JS中引入了类型的概念,并添加了许多新的特性。
  3. TS代码需要通过编译器编译为JS,然后再交由JS解析器执行。
  4. TS完全兼容JS,换言之,任何的JS代码都可以直接当成TS使用。
  5. 相较于JS而言,TS拥有了静态类型,更加严格的语法,更强大的功能;
    TS可以在代码执行前就完成代码的检查,减小了运行时异常的出现的几率;
    TS代码可以编译为任意版本的JS代码,可有效解决不同JS运行环境的兼容问题;
    同样的功能,TS的代码量要大于JS,但由于TS的代码结构更加清晰,变量类型更加明确,在后期代码的维护中TS却远远胜于JS。

TypeScript 开发环境搭建

  1. 下载Node.js

    在这里插入图片描述

  2. 安装Node.js
    在这里插入图片描述

  3. 使用npm全局安装typescript

    • 进入命令行
    • 输入:npm i -g typescript

    在这里插入图片描述

  4. 创建一个ts文件

  5. 使用tsc对ts文件进行编译

    • 进入命令行

    • 进入ts文件所在目录

    • 执行命令:tsc xxx.ts
      在这里插入图片描述
      在这里插入图片描述

基本类型

类型声明

  • 通过类型声明可以指定TS中变量(参数、形参)的类型

  • 指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错

  1. 变量a 指定类型为number,就不能赋值为其他类型
    在这里插入图片描述
  2. 函数中也可以进行类型声明,在函数中对参数进行类型声明的话,传参就要传指定类型的参数
    在这里插入图片描述
  3. 函数中的返回值也可以类型声明
    在这里插入图片描述

简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值

语法:

      let 变量: 类型;
      
      let 变量: 类型 =;
      
      function fn(参数: 类型, 参数: 类型): 返回值类型{
   
          ...
      }

自动类型判断

  • TS拥有自动的类型判断机制

  • 当对变量的声明和赋值是同时进行的,TS编译器会自动判断变量的类型

  • 所以如果你的变量的声明和赋值时同时进行的,可以省略掉类型声明

    let a = 10; // 变量的声明和赋值是同时进行的,所以可以省略掉类型声明
    a = 'hello'; // 会报错,因为已经声明a变量为number,就不能再赋值为string类型
    
  • 类型:

    类型 例子 描述
    number 1, -33, 2.5 任意数字
    string ‘hi’, “hi”, hi 任意字符串
    boolean true、false 布尔值true或false
    字面量 其本身 限制变量的值就是该字面量的值
    any * 任意类型
    unknown * 类型安全的any
    void 空值(undefined) 没有值(或undefined)
    never 没有值 不能是任何值
    object {name:‘孙悟空’} 任意的JS对象
    array [1,2,3] 任意JS数组
    tuple [4,5] 元素,TS新增类型,固定长度数组
    enum enum{A, B} 枚举,TS中新增类型

number

    let decimal: number = 6;
    let hex: number = 0xf00d;
    let binary: number = 0b1010;
    let octal: number = 0o744;
    let big: bigint = 100n;

boolean

   let isDone: boolean = false;

string

   let color: string = "blue";
   color = 'red';
   
   let fullName: string = `Bob Bobbington`;
   let age: number = 37;
   let sentence: string = `Hello, my name is ${
     fullName}.
   
   I'll be ${
     age + 1} years old next month.`;

字面量

也可以使用字面量去指定变量的类型,通过字面量可以确定变量的取值范围
限制变量的值就是该字面量的值

// 可以使用 | 来连接多个类型(联合类型)
let b: 'male' | 'female';
b = 'male';
b = 'hello'; // 报错

let c: boolean | string;
c = true;
c = 'hello';

any(尽量不要用)

any 表示任意类型,可以任意赋值(一个变量设置类型为any后,相当于对该变量关闭了TS的类型检测)

  • 不建议使用any!!!
// any 表示任意类型,可以任意赋值
let d; // 隐式any(TS解析器会自动判断变量的类型为any)
let d:any; // 显示any
d = 10;
d = 'hello';
d = true;
  • 用了any,可以赋值给任何变量
let s: string;
// d的类型是any,它可以赋值给任意变量
s = b;

unknown

  1. unknow 实际上是一个类型安全的any
  2. unknow 类型的变量不能赋值给其他变量
  3. 如果要赋值的话,可以进行 ①类型判断 ②类型断言
// unknown 表示未知类型的值
let e: unknown;
e = 10;
e = 'hello';

let s: string;
// unknow 实际上是一个类型安全的any
// unknow 类型的变量不能赋值给其他变量
if (typeof e === 'string') {
    // 类型判断
   s = e; // 不报错
}
s = e; // 报错!!

void

void 表示空,以函数为例,表示没有返回值的函数(或者undefined)

// void 表示空,以函数为例,表示没有返回值的函数
function fn(): void {
   
   return 123; // 报错!!因为有返回值
   return undefined; // 不报错
}

never

never 表示永远不会返回结果

// never 表示永远不会返回结果
function fn1():never{
   
   throw new Error(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,首先你需要安装webpack5、react、typescript、eslint以及相关的loader和插件。你可以通过以下命令安装它们: ``` npm install webpack webpack-cli webpack-dev-server react react-dom @types/react @types/react-dom typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint eslint-config-airbnb eslint-config-prettier eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-prettier eslint-plugin-react eslint-plugin-react-hooks prettier -D ``` 接下来,你需要创建一个webpack配置文件,可以命名为`webpack.config.js`,在该文件中配置webpack相关内容: ```javascript const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.tsx', output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.js', }, resolve: { extensions: ['.tsx', '.ts', '.js'], }, module: { rules: [ { test: /\.(ts|tsx)$/, exclude: /node_modules/, use: [ { loader: 'babel-loader', options: { presets: [ '@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript', ], }, }, { loader: 'ts-loader', }, ], }, { test: /\.(js|jsx)$/, exclude: /node_modules/, use: ['babel-loader'], }, { test: /\.css$/, use: ['style-loader', 'css-loader'], }, ], }, plugins: [ new HtmlWebpackPlugin({ template: './public/index.html', }), ], devtool: 'inline-source-map', devServer: { contentBase: './dist', port: 3000, }, mode: 'development', }; ``` 在上面的配置中,我们指定了入口文件为`src/index.tsx`,打包后的输出文件为`dist/bundle.js`。我们还通过resolve属性指定了文件的拓展名,这样在引入文件时就不用指定拓展名了。 在module属性中,我们定义了不同类型文件的loader,例如对于`.tsx`和`.ts`文件,我们使用了`babel-loader`和`ts-loader`,对于`.js`和`.jsx`文件,我们只使用了`babel-loader`。此外,我们还使用了`style-loader`和`css-loader`处理`.css`文件。 在plugins属性中,我们使用了`HtmlWebpackPlugin`插件,用于生成HTML文件。在devServer属性中,我们指定了开发服务器的端口和从哪个文件夹提供内容。 最后,我们使用了`inline-source-map`作为开发模式下的source-map,将模式设置为`development`。 接下来,你需要创建一个`.babelrc`文件,用于配置babel: ```json { "presets": ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"] } ``` 然后,你需要创建一个`.eslintrc.json`文件,用于配置eslint: ```json { "parser": "@typescript-eslint/parser", "plugins": ["@typescript-eslint"], "extends": ["airbnb", "plugin:@typescript-eslint/recommended", "prettier"], "rules": { "prettier/prettier": ["error"], "react/jsx-filename-extension": [1, { "extensions": [".tsx"] }], "import/extensions": ["error", "never", { "svg": "always" }] }, "settings": { "import/resolver": { "node": { "extensions": [".js", ".jsx", ".ts", ".tsx"] } } } } ``` 在上面的配置中,我们使用了`@typescript-eslint/parser`解析Typescript代码,并使用了`@typescript-eslint/eslint-plugin`插件提供的规则。我们还继承了`eslint-config-airbnb`和`eslint-config-prettier`,并使用了一些自定义的规则。 最后,你需要在`package.json`中添加一些scripts,用于启动开发服务器和打包代码: ```json { "scripts": { "start": "webpack serve --mode development", "build": "webpack --mode production" } } ``` 现在你就可以使用`npm start`命令启动开发服务器,使用`npm run build`命令打包代码了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值