TypeScript学习笔记(一)编译环境、数据类型、函数类型、联合类型

news2024/11/17 6:42:20

文章目录

    • 编译环境
    • 基本类型
    • 函数类型
      • 函数重载
      • 联合类型和函数重载

编译环境

TypeScript最终会被编译成JavaScript来运行,所以我们需要搭建对应的环境。
首先我们要全局安装typescript

# 安装命令
npm install typescript -g
# 查看版本
tsc --version

在这里插入图片描述
⭐️ 方式一:通过webpack,配置本地的TypeScript编译环境和开启一个本地服务,可以直接运行在浏览器上

  1. 安装webpack相关的依赖

使用webpack开发和打开,需要依赖webpack、webpack-cli、webpack-dev-server

npm install webpack webpack-cli webpack-dev-server -D
  1. 在package.json中添加启动命令

为了方便启动webpack,我们在package.json中添加如下启动命令

"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "serve": "cross-env NODE_ENV=development webpack-dev-server --mode=development --config build/webpack.config.js"
},
  1. 添加webpack的其他相关依赖

依赖一:cross-env

这里我们用到一个插件 “cross-env” ,这个插件的作用是可以在webpack.config.js中通过 process.env.NODE_ENV 来获取当前是开发还是生产环境,我们需要这个插件:

npm install cross-env -D

依赖二:ts-loader

因为我们需要解析.ts文件,所以需要依赖对应的loader:ts-loader

npm install ts-loader -D

依赖三:html-webpack-plugin

编译后的代码需要对应的html模块作为它的运行环境,所以我们需要使用html-webpack-plugin来将它插入到对应的模板中:

npm install html-webpack-plugin -D
  1. 配置webpack.config.js文件
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  entry: "./src/main.ts",
  output: {
    filename: "build.js",
  },
  resolve: {
    extensions: [".tsx", ".ts", ".js"],
  },
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        use: "ts-loader",
        exclude: /node_modules/,
      },
    ],
  },
  devtool: process.env.NODE_ENV === "production" ? false : "inline-source-map",
  devServer: {
    static: "./dist",
    // stats: "errors-only",
    compress: false,
    host: "localhost",
    port: 8080,
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "./index.html",
    }),
  ],
};

下面我们就可以愉快的在main.ts中编写代码,之后只需要启动服务即可:

在终端中启动服务:npm run serve

方式一: 参考文章:

TypeScript(二)使用Webpack搭建环境

⭐️ 方式二:通过ts-node库,为TypeScript的运行提供执行环境

  1. 安装ts-node
npm install ts-node -g
  1. 另外ts-node需要依赖tslib@types/node 两个包:
npm install tslib @types/node -g
  1. 现在,我们可以直接通过ts-node来运行TypeScript的代码
ts-node math.ts

在这里插入图片描述

在这里插入图片描述

基本类型

// number类型
let num: number = 100;
// string类型
let msg: string = "abc"; // 一般这种可以不写类型注解
// boolean类型
let flag: boolean = true;
// null undefined
let n: null = null;
let u: undefined = undefined;

// Array类型
let arr1: string[] = ["abc", "123"];
let arr2: Array<string> = ["aaaa", "ccc"];

// Object类型
let obj: {
  name: string;
  age: number;
} = {
  name: "zhangsan",
  age: 18,
};
console.log(obj.age);

// Symbol类型
const s1: symbol = Symbol("title");
const s2: symbol = Symbol("title");

const person = {
  [s1]: "程序员",
  [s2]: "老师",
};

// any
let a: any = "why";
a = 123;

let flag = true;
function foo(): string {
  return "foo";
}
function bar(): number {
  return 123;
}
// unknow
let result: unknown;
if (flag) {
  result = foo();
} else {
  result = bar();
}

// void
function sum(num1: number, num2: number): void {
  console.log(num1 + num2);
}
// never类型 永远不会发生值的类型
// tuple
const tInfo: [string, number, number] = ["abc", 18, 22];


export {};

函数类型

// 函数的参数类型注解
function greet(name: string) {
  console.log("hello" + name.toUpperCase());
}

console.log(greet("world"));

// 函数的返回值类型
function sum(num1: number, num2: number): number {
  return num1 + num2;
}

const names = ["abc", "cba", "nba"];
// 并未指定item的类型 但是item是string类型
names.forEach((item) => {
  console.log(item.toUpperCase());
});

// 函数接收的参数是一个对象 z?可选类型
function printCoordinate(point: { x: number; y: number; z?: number }) {
  console.log("x坐标", point.x);
  console.log("y坐标", point.y);
}
printCoordinate({ x: 10, y: 30 });

// 联合类型
type ID = number | string;
// function printId(id: number | string) {
function printId(id: ID) {
  console.log("你的id是:", id);
}
printId(10);
printId("abc");

// 类型断言
const myEl = document.getElementById("my-img") as HTMLElement;
// const myEl = document.getElementById("my-img") as HTMLImageElement;

// 非空类型断言! 确定某个标识符是有值的
function printMsg(message?: string) {
  console.log(message!.toUpperCase());
}

// ??和!!的作用
// 将一个其他类型转换成 boolean类型
// ?? 逻辑操作符 左侧是null或者undefined时, 返回其右侧操作数

函数重载

// 函数重载
// 如果编写了一个add函数,希望可以对字符串和数字类型进行相加
// 应该如何编写?
// 以下是错误方式:
// function sum(a1: number | string, a2: number | string): number | string {
//   return a1 + a2;
// }

// 正确方式:
function sum(a1: number, a2: number): number;
function sum(a1: string, a2: string): string;
function sum(a1: any, a2: any): any {
  return a1 + a2;
}
console.log(sum(10, 20));
console.log(sum("aa", "bb"));

export {};

联合类型和函数重载

// 联合类型和重载
// 需求:定义一个函数,可以传入字符串或者数组,获取它们的长度
// 1. 联合类型
function getLength(a: string | any[]) {
  return a.length;
}
// 2. 函数重载
function getLength(a: string): number;
function getLength(a: any[]): number;
function getLength(a: any) {
  return a.length;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/366465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2023-2-23】FastDeploy 安装教程

【2023-2-22】FastDeploy 安装编译教程 该测试 FastDeploy CPU版本。 1. fastDeploy库编译 1.1 官方预编译库下载 预编译库下载安装 1.2 自定义CPU版本库编译 官方编译FastDeploy教程 CMakeGUI VS 2019 IDE编译FastDeploy 本人编译教程 CMAKE_CONFIGURATION_TYPES 属性设…

(三十一)大白话MySQL如果事务执行到一半要回滚怎么办?再探undo log回滚日志原理

之前我们已经给大家深入讲解了在执行增删改操作时候的redo log的重做日志原理&#xff0c;其实说白了&#xff0c;就是你对buffer pool里的缓存页执行增删改操作的时候&#xff0c;必须要写对应的redo log记录下来你做了哪些修改 如下图所示&#xff1a; 这样万一要是你提交事…

渗透测试之DNS域名信息探测实验

渗透测试之DNS域名信息探测实验实验目的一、实验原理1.1 域名1.2 .域名的构成1.3 域名的基本类型1.4 域名级别二、实验环境2.1 操作机器三、实验步骤1. 使用sp查询域名信息2. 进行探测实验实验目的 掌握使用nslookup进行DNS域名信息探测的原理和方式了解子域名查询网站 一、实…

PCB封装孔小,元器件无法插入,如何解决?

DIP就是插件&#xff0c;采用这种封装方式的芯片有两排引脚&#xff0c;可以直接焊在有DIP结构的芯片插座上或焊在有相同焊孔数的焊位中。其特点是可以很方便地实现PCB板的穿孔焊接&#xff0c;和主板有很好的兼容性。但是由于其封装面积和厚度都比较大&#xff0c;而且引脚在插…

Allegro如何打开格点显示效果操作指导

Allegro如何打开格点显示效果操作指导 Allegro可以设置格点显示效果,以格点来判定走线等等是否都处于格点上,如下图 如何打开格点显示效果,具体操作如下 点击Setup点击Grids

KUKA机器人_基础编程中的变量和协定

KUKA机器人_基础编程中的变量和协定 KUKA机器人KRL中的数据保存:  每个变量都在计算机的存储器中有一个专门指定的地址  一个变量用非KUKA关键词的名称来表示  每个变量都属于一个专门的数据类型  在应用前必须声明变量的数据类型  在KRL中有局部变量和全局变量之分…

winapi获取和修改camera raw界面元素数据

camera raw 界面如下&#xff1a; 需求就是根据 windows api 来操作界面右边的色温、色调、曝光等属性&#xff0c;进而对图片进行调色。根据 spy 捕获的窗口信息&#xff0c;理论上是可以拿到并修改值的。 根据 class 可以先拿到窗口句柄&#xff1a; #define CAMERA_RAW_CLA…

2022年工程机械出口专题研究【重工】

文章目录2022年工程机械出口专题研究1、中国是全球工程机械第一大市场&#xff0c;竞争力逐步提升2、工程机械出口高增&#xff0c;市场分布趋于多元&#xff0c;企业营收获益3、海外市场高速增长原因为何&#xff1f;4、海外市场增长动能预测附件&#xff1a;2022年工程机械出…

拖拽删除元素、拖拽排序、拖拽预览图片和拖拽移动元素

介绍 HTML5 提供了专门的拖拽与拖放的 API&#xff0c;目前各浏览器都已支持&#xff0c;包括 IE。HTML 拖放&#xff08;Drag and Drop&#xff09;接口使应用程序能够在浏览器中使用拖放功能。例如&#xff0c;用户可使用鼠标选择可拖拽&#xff08;draggable&#xff09;元素…

OpenGov的首个方案已上线Moonriver

随着公投128的通过&#xff0c;作为Runtime 2100的一部分&#xff0c;Moonbeam在Moonriver上推出了OpenGov。Moonbeam上的OpenGov部署将从Moonriver开始&#xff0c;以获得社区反馈。未来将举行公投&#xff0c;让社区来决定OpenGov如何发展并转移至Moonbeam。 Moonriver上的O…

Airbyte架构

作为一款技术复杂的数据集成管道&#xff0c;Airbyte的架构模式非常清晰明了。Airbyte应用模式Airbyte管道架构UI&#xff1a;一个易于使用的图形界面&#xff0c;用于与Airbyte API进行交互。WebApp Server&#xff1a;处理 UI 和 API 之间的连接。Config Store&#xff1a;存…

Java中安装JDK环境–javac命令无效

Java中安装JDK环境–javac命令无效 一&#xff0c;安装JDK1.8 阿里云盘地址推荐 我们可以选择安装地址&#xff0c;这个地址是我们用来配置环境变量的&#xff0c;唯一注意的是这个&#xff0c;其他的都是默认下一步。直至安装完成&#xff0c;jdk下载地址https://www.oracl…

驱动程序开发:基于ICM20608六轴传感器 --- 使用Regmap API 的 SPI 读取数据 之 IIO驱动

目录一、IIO 子系统简介二、IIO子系统使用的一些相关的结构体、函数等1、iio_dev 结构体  ①modes&#xff1a;是选择iio驱动设备支持的工作模式&#xff0c;模式分别有如下&#xff1a;  ②dev&#xff1a;其是一个设备结构体。  ②channels&#xff1a;为 IIO 设备通道…

spring boot的包扫描范围

目录标题一、误解二、正确的理解三、不同包也能扫描到Bean的方法一、误解 一开始我一直以为spring boot默认的包扫描范围是启动类的同级目录和子目录下的Bean。其实正真是与启动类在同个包以及子包下的Bean。 我一直误解了包的概念&#xff0c;包并不是只文件夹&#xff08;文…

vscode远程调试python

目的 注意&#xff1a;这里我们想要实现的是&#xff1a;用vscode 使用remote ssh打开project&#xff0c;然后直接在project里面进行debug&#xff0c;而不需要 在本地vscode目录打开一样的project。 假设大家已经会使用remote ssh打开远程服务器的代码了&#xff0c;那么只…

Qt——QLineEdit

QLineEdit是一个单行文本编辑控件。 使用者可以通过很多函数&#xff0c;输入和编辑单行文本&#xff0c;比如撤销、恢复、剪切、粘贴以及拖放等。 通过改变QLineEdit的 echoMode() &#xff0c;可以设置其属性&#xff0c;比如以密码的形式输入。 文本的长度可以由 maxLength(…

ctf pwn基础-2

今天学了一个保护的绕过&#xff0c;这里讲一讲&#xff0c;这个好像是使用的是格式化字符串漏洞。 目录 基础 实例讲解 基础 首先我们要知道什么是canary保护&#xff0c;就是在入栈EBP以后加一个Canary 我可能讲的不是很好&#xff0c;大家可以看看这些 文章 用通俗一点将就…

C++问答汇总_2023自用

C是一种通用编程语言&#xff0c;具有高级抽象、强类型和编译性能等特点。C语言具有许多特性&#xff0c;包括面向对象编程、模板、多态、运算符重载等等。它广泛应用于各种领域&#xff0c;如系统软件、嵌入式系统、游戏开发、科学计算等等。 1、C11相对于C98的新特性&#xf…

Redis的安装部署和配置文件的修改

1、准备安装环境 由于 Redis 是基于 C 语言编写的&#xff0c;因此首先需要安装 Redis 所需要的依赖&#xff1a; yum install -y gcc tcl gcc-c make 2、上传安装文件 将下载好的 redis-6.2.7.tar.gz 安装包上传到虚拟机的任意目录&#xff08;一般推荐上传到 /usr/local/s…

贝叶斯网络实践

目录 一。朴素贝叶斯的假设 二。朴素贝叶斯的推导 三。高斯朴素贝叶斯Gaussian Naive Bayes 四。多项分布朴素贝叶斯Multinomial Naive Bayes 五。以文本分类为例 1.分析 2.分解 3.拉普拉斯平滑 4.对朴素贝叶斯的思考 六。总结 七。word2vec 八。GaussianNB,…