java编程者快速掌握ts变量类型

JAVA编程者快速掌握typeScript

  1. TypeScript是JavaScript的超集。

  2. 它对JS进行了扩展,向JS中引入了类型的概念,并添加了许多新的特性。

  3. TS代码需要通过编译器编译为JS,然后再交由JS解析器执行。

  4. TS完全兼容JS,换言之,任何的JS代码都可以直接当成JS使用。

  5. 相较于JS而言,TS拥有了静态类型,更加严格的语法,更强大的功能;TS可以在代码执行前就完成代码的检查,减小了运行时异常的出现的几率;TS代码可以编译为任意版本的JS代码,可有效解决不同JS运行环境的兼容问题;同样的功能,TS的代码量要大于JS,但由于TS的代码结构更加清晰,变量类型更加明确,在后期代码的维护中TS却远远胜于JS。

    TypeScript 开发环境搭建

    1. 下载Node.js

      • 官网下载Node.js (nodejs.org)
    2. 安装Node.js

    3. 使用npm全局安装typescript

      • 进入命令行
      • 输入:npm i -g typescript
    4. 创建一个ts文件

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

      • 进入命令行

      • 进入ts文件所在目录

      • 执行命令:tsc xxx.ts

      • 自动类型判断

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

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

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

          类型总览:

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

    变量申明

// 字符串类型变量 类似对象图  对象名:类名
let a: string
a= = "10"// 数字类型变量
let b: number;// 严格类型要求,但类型错误仅在 TypeScript 编译时出现 但是运行转换为js任然可以实现
a = "20";
无限制类型,可赋值任意类型
b = 30;

// 类型变换为字符串

a = "我是帅哥";
a = a + "" + b;
自动类型推断
let c: boolean = false; //申明变量的时候直接赋值
或者
let cc=true //效果一样的
函数声明
let ss: Function = () => {console.log("ss");
};

// 函数声明,指定参数类型和返回值类型

let sum: Function = (a: number, b: number): number => {return a + b;
};

// 函数声明(另一种形式)

function divide(a: number, b: number): number {return a - b;
}
字面量,

类似常量,无法二次赋值

let aa: 10;
aa = 20;//这里编译器报错

// 字面量常用于限制变量值

let name1: "jack" | "john" | "mike" = "jack";
console.log(name1);
name1 = "john";
name1 = "mike";  // 只能赋值三个中的一个
联合类型
let op: string | boolean = false;
op = "这是字面量的第二种用法,限制类型";
任意类型,

类似 JavaScript 的 var

let d: any;
d = false;
d = 13;
d = "相当于设置为 any 后,关闭了 TypeScript 的类型检测";

// 隐式 any

let d1;
let d2: boolean = true;

// 创建变量不复制即为隐式 any

d2 = 45; // 直接申明赋值默认解析为赋值类型
d1 = 45;
d1 = "asas";
未知类型

当不知道传递过来的参数是什么,或者没想好变量定义什么时候就可以使用 未知类型

let e: unknown;
e = 10;
e = "hello";
e = {};

// 类型判断和处理

//未知变量和any的区别是,any可以被任何变量接收,其他变量接收后就会变成不受ts 的type监管的原生js变量
//所以一般推荐使用uknow ,未知变量不能直接赋值,需要经过逻辑处理编译器才不会报错
if (typeof e === 'string') {let e1: string = e as string;
}
断言 (对应java强转) 其实ts有点想java顶级超类 可以接收任意类型 然后强转为他们

// :判断   as (强转)  any 简记为不受ts判断的类型 ukonw 类似超累可以接收所有类型,
// 根据typeof 判断类型是否是需要类型 as强转换
/*** type js 慢慢开始对类型进行限定越来越想java*/
let s:String=e as String
void 类型,用于函数返回值
let bianli: Function = (arr: number[]): void => {for (let i = 1; i < arr.length; i++) {console.log(arr[i]);}
};

函数返回值类型为 boolean 或 number

let sout = (a: number, b: boolean): boolean | number => {if (a > 3)return false;return a;
};
never 类型,表示函数永远不会返回 对应java异常抛出
let login = (a: boolean): never => {throw new Error("code error 代码线程停止 用来抛异常");
};
对象类型,用于限制对象内元素类型
let obj: object = {name: String,age: Number
};
obj = {name: "123",age: 15
};
不推荐的对象类型声明方式 这样可以直接修改对象类型,限制度又没有了
let obj2: Object;
obj2 = {ahe: 32,name: "ASAS"
};
obj2 = {};

推荐使用对象字面量修饰变量

let  obj3 :{asas: stringmoney: number
};
对象属性可选性
let obj4: {name: string,a?: number
};
对应java 可选属性
obj4 = { name: "name是必须的" };
obj4 = {name: "name是必须的,加了?的属性表示可选",a: 888
};

// 可选属性的实际使用

let obj5: {     //java的动态变量这样就可以做到任意变量参数 除了对象,还由方法name: string,//表示 变量名为字符类型,可变变量值为字符或者数字[propName: string]: string | number // 或者使用 union 类型包含可能的其他属性类型
};
obj5 = {name: "name是必须的"
};

// 当使用字面来申明函数时候格式如下,但是很麻烦推荐原来的const 方法名=():返回值=> 接收即可

const methodAdd: (name: string, age: number) => number = (name, age) => {console.log(name);return 1;
};
数组类型声明
let arr: number[] = [1, 2];
元组类型,长度固定的数组
let h: [string, String] = ["1", "2"];
h = ["3", "4"];
// 超出长度会报错
// h = ["3", "4", ""];
枚举类型
enum MaleStatus {Male,Female
}
let p: { name: string, gender: MaleStatus } = { name: "hcyh", gender: MaleStatus.Male };
/或 字符串或数字类型
let j: string | number;
与,用于限制对象内部的元素
let u: { name: string } & { gender: MaleStatus };
u = { name: "hcyh", gender: MaleStatus.Male };
// 不满足交叉类型出错u = { name: "hcyh", "nv" };
类型别名,提高可读性
type pre = 1 | 2 | 3 | 4 | 5;
type suffix = 6 | 7 | "你好帅";

方便使用和书写

let l1: pre | suffix;

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

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

相关文章

python通过slots指定实例属性列表

1 python通过slots指定实例属性列表 python类通过__slots__属性列表&#xff0c;指定类实例可以创建的属性。 1.1 slots基础 用法 >>> class SlotsC:__slots__[attr1,...,attrn]描述 &#xff08;1&#xff09; 实例只能创建__slots__列表内声明的属性&#xff1…

leetcode 1466

leetcode 1466 使用dfs 遍历图结构 如图 node 4 -> node 0 -> node 1 因为节点数是n, 边长数量是n-1。所以如果是从0出发的路线&#xff0c;都需要修改&#xff0c;反之&#xff0c;如果是通向0的节点&#xff0c;例如节点4&#xff0c;则把节点4当作父节点的节点&…

保障网络安全:了解威胁检测和风险评分的重要性

在当今数字时代&#xff0c;网络安全问题变得愈发突出&#xff0c;而及时发现和迅速应对潜在威胁成为保障组织信息安全的首要任务。令人震惊的是&#xff0c;根据2023年的数据&#xff0c;平均而言&#xff0c;检测到一次网络入侵的时间竟然长达207天。这引起了对安全策略和技术…

威睿三合一电驱动系统斩获“2023汽车新供应链百强-金辑奖”

10月19日&#xff0c;2023第五届“金辑奖”颁奖盛典在上海圆满落幕。威睿公司“高效低噪碳化硅电驱动系统”在动力总成电气化领域脱颖而出&#xff0c;荣获“2023中国汽车新供应链百强”荣誉称号。 “金辑奖”由盖世发起&#xff0c;旨在“发现好公司推广好技术成就汽车人”&a…

12月14日,每日信息差

以下是2023年12月14日的10条信息差 第一、极氪发布首款自研电池&#xff0c;将在极氪007上首发搭载。该电池为量产快充磷酸铁锂电池&#xff0c;将在极氪007上首发搭载&#xff0c;充电15分钟续航增加超过500公里&#xff0c;-10C低温环境快充速度提升25% 第二、芒果TV与抖音…

利用机器学习实现客户细分:提升市场营销效果的技术策略

客户细分是一项关键的市场营销策略&#xff0c;可以帮助企业更好地了解其目标受众&#xff0c;个性化定制产品和服务&#xff0c;提高市场营销效果。本文将介绍如何利用机器学习算法实现客户细分&#xff0c;包括数据准备、特征工程、算法选择、模型训练和评估等关键步骤。通过…

一文5000字从0到1构建高效的接口自动化测试框架思路

在选择接口测试自动化框架时&#xff0c;需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说&#xff0c;使用Python相关的测试框架更为便捷。无论选择哪种框架&#xff0c;重要的是确保 框架功能完备&#xff0c;易于维护和扩展&#xff0c;提高测试效率和准确性。…

雪花算法详细讲解

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

36、什么是池化算法

池化算法也是 CNN 网络中非常常见的算法。 池化这一算法理解起来比较简单,从名字中或许可以看到一些东西:从一个像素池子中选取一些有代表性的像素出来。 常见的池化有最大池化和平均池化。最大池化就是从像素池子中选取最大值出来,而平均池化就是从像素池子中选取平均值出…

MySQL8.0默认配置详解--持续更新中

binlog日志的默认保留数量和大小 在MySQL 8.0中&#xff0c;您可以使用以下SQL命令来查询binlog日志的默认保留数量和大小&#xff1a; SHOW VARIABLES LIKE binlog_expire_logs_seconds; SHOW VARIABLES LIKE max_binlog_size;binlog_expire_logs_seconds 变量表示binlog日志…

Linux---mkdir和rm命令选项

1. mkdir命令选项 命令选项说明-p创建所依赖的文件夹 mkdir命令选项效果图: 2. rm命令选项 命令选项说明-i交互式提示-r递归删除目录及其内容-f强制删除&#xff0c;忽略不存在的文件&#xff0c;无需提示-d删除空目录 rm -i命令选项效果图: rm -r命令选项效果图: rm -f命…

【c】数组元素移动

本题的难点之处就是不让你创建新的数组&#xff0c;而且移动的距离也没有给限制&#xff0c;比如有7个数&#xff0c;本题没有限制必须移动距离小于7&#xff0c;也可能移动的距离大于7&#xff0c;甚至更多&#xff0c;下面附上我的代码 #include<stdio.h>int main() {…

RK3568平台 OTA升级原理

一.前言 在迅速变化和发展的物联网市场&#xff0c;新的产品需求不断涌现&#xff0c;因此对于智能硬件设备的更新需求就变得空前高涨&#xff0c;设备不再像传统设备一样一经出售就不再变更。为了快速响应市场需求&#xff0c;一个技术变得极为重要&#xff0c;即OTA空中下载…

关于“Python”的核心知识点整理大全12

目录 6.3.3 按顺序遍历字典中的所有键 6.3.4 遍历字典中的所有值 6.4 嵌套 6.4.1 字典列表 aliens.py 6.4.2 在字典中存储列表 pizza.py favorite_languages.py 注意 往期快速传送门&#x1f446;&#xff08;在文章最后&#xff09;&#xff1a; 6.3.3 按顺序遍历字…

VR全景技术对房产行业有什么好处,如何帮助展示户型

引言&#xff1a; 随着科技的飞速发展&#xff0c;VR全景技术逐渐走入我们的生活&#xff0c;为我们带来了前所未有的沉浸式体验。在房产行业&#xff0c;VR全景技术正逐渐改变传统的户型和样板间展示方式&#xff0c;为购房者带来更为直观、真实的购房体验。 一、VR全景技术在…

Docker多平台安装与配置指南

Docker的流行使得它成为开发者和运维人员不可或缺的工具。在本文中&#xff0c;将深入探讨如何在不同平台上安装和配置Docker&#xff0c;旨在为大家提供详尽的指南&#xff0c;确保他们能够顺利地使用这一强大的容器化工具。 Docker基础概念回顾 Docker利用容器技术&#xf…

回溯热门问题

关卡名 回溯热门问题 我会了✔️ 内容 1.组合总和问题 ✔️ 2.分割回文串问题 ✔️ 3.子集问题 ✔️ 4.排列问题 ✔️ 5.字母全排列问题 ✔️ 6.单词搜索 ✔️ 1. 组合总和问题 LeetCode39题目要求&#xff1a;给你一个无重复元素的整数数组candidates和一个目标整数 ta…

leetcode做题笔记2132. 用邮票贴满网格图

给你一个 m x n 的二进制矩阵 grid &#xff0c;每个格子要么为 0 &#xff08;空&#xff09;要么为 1 &#xff08;被占据&#xff09;。 给你邮票的尺寸为 stampHeight x stampWidth 。我们想将邮票贴进二进制矩阵中&#xff0c;且满足以下 限制 和 要求 &#xff1a; 覆盖…

最快的排序算法TimSort还能更快吗

关于TimSort排序算法&#xff0c;请看这篇&#xff1a;另一位博主的博客 本文主要讨论让TimSort更快的方法。 已经产生了许多run&#xff0c;它们的长度是&#xff1a;4 6 2 5 7 用类似于霍夫曼编码的方法&#xff0c;找出最小的两项&#xff0c;相加。这里是4 2&#xff0c…

MATLAB 最小二乘直线拟合方法二 (36)

MATLAB 最小二乘直线拟合方法二 (36) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 这里介绍另一种拟合直线点云的方法,更为简单方便,结果与前者一致,主要内容直接复制代码使用即可,原理简单看代码即可,下面是具体的实现和拟合结果展示 二、算法实现 1.代码 代…