TypeScript【什么是TypeScript、安装并编译TypeScript、变量声明、原始数据类型、数组、元组、任意值】(一)-全面详解(学习总结---从入门到深化)

简介: TypeScript【什么是TypeScript、安装并编译TypeScript、变量声明、原始数据类型、数组、元组、任意值】(一)-全面详解(学习总结---从入门到深化)

什么是 TypeScript



在了解TypeScript之前,我们先来回顾一下JavaScript的知识点

function add(n,m){
  console.log(n+m)
}
add(10,20); // 30
add(10,"20") // 1020


TypeScript是由微软开发的超集JavaScript的编程语言。它是一种静态类型语言,意味着在编写代码时,你必须指定每个变量的类型,而不是在运行时动态检测它们的类型。


TypeScript为JavaScript提供了一些高级功能,如类型检查和面向对象编程,使得JavaScript开发人员能够更轻松地编写大型应用程序TypeScript代码可以通过编译器转换为JavaScript代码,这样就可以在浏览器或任何其他JavaScript运行环境中运行。它与JavaScript的兼容性非常好,因此你可以在现有的JavaScript项目中使用TypeScript,或者在新项目中从头开始使用TypeScript开发

function add(n:number,m:number){
  console.log(n+m)
}
add(10,20);
add(10,"20"); // Argument of type 'string' is not assignable to parameter of type 'number'


TypeScript与JavaScript的关系


为了更好的理解,我们可以将三者看成是包含关系


安装并编译TypeScript



我们所编写的应用程序最终是需要运行在浏览器中的,但是浏览器能识别的语言是JavaScript而非TypeScript。那么问题来了,我们编写TypeScript的代码如何运行在浏览器中呢?答案:将TypeScript编译成JavaScript代码在运行在浏览器中!


安装 TypeScript

npm install -g typescript


以上命令会在全局环境下安装 tsc 命令,安装完成之后,我们就可以在任何地方执行 tsc 命令了


检查是否安装成功: tsc -v


编译TypeScript

// hello.ts
function add(n:number,m:number){
  console.log(n+m)
}
add(10,20);


编译一个 TypeScript 文件很简单

tsc hello.ts


运行TypeScript

function sayHello(person: string) {
  return "Hello, " + person;
}
let user = "itxiaotong";
document.body.textContent = sayHello(user);
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <script src="./hello.js"></script>
</body>
</html>


变量声明



letconstJavaScript 中变量声明的两个相对较新的概念


在某些方面 let 类似于 var ,但允许用户避免用户在 JavaScript 中遇到的一些常见“陷阱”


const 是一个常量,防止变量被重新赋值


由于 TypeScriptJavaScript 的扩展,该语言自然支持 let const


Let声明


块级作用域

{
 let a = 10;
 var b = 1;
}
a // ReferenceError: a is not defined.
b // 1


块级作用域解决的最大问题就是在JavaScript中令人头疼的闭包问题!

var a = [];
for (let i = 0; i < 10; i++) {
 a[i] = function () {
  console.log(i);
 };
}
a[6](); // 6


不存在变量提升

// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;


不允许重复声明

// 报错
function func() {
 let a = 10;
 let a = 1;
}


Const声明


const 声明一个只读的常量。一旦声明,常量的值就不能改变


基本用法

const PI = 3.1415;
PI // 3.1415
PI = 3;
// TypeError: Assignment to constant variable.


温馨提示

Const同样不存在变量提升与重复声明


原始数据类型



JavaScript 的类型分为两种:原始数据类型和对象类型(也就是我们平时说的基本数据类型与引用数据类型)


温馨提示

在这里 null 和 undefined 我们依然归类为特殊类型


原始数据类型包括:布尔值、数值、字符串以及 ES6 中的新类型 Symbol和 ES10 中的新类型 BigInt

接下来我们说一说原始数据类型在TypeScript中如何使用


布尔值


最基本的数据类型就是简单的 true/false 值,在 JavaScript 和 TypeScript 里叫做 boolean

let isFlag: boolean = false;


数值


和 JavaScript 一样,TypeScript 里的所有数字都是浮点数或者大整数 。 这些浮点数的类型是 number 。 除了支持十进制和十六进制字面量,TypeScript 还支持 ECMAScript 2015 中引入的二进制和八进制字面量

let age: number = 6; // 十进制
let myColor: number = 0xf00d; // 十六进制
let flag: number = 0b1010; // 二进制
let test: number = 0o744;  // 八进制


其中 0b10100o744 是 ES6 中的二进制和八进制表示法,它们会被编译为十进制数字


字符串


我们使用 string 表示文本数据类型。 和 JavaScript 一样,可以使用双引号( " )或单引号( ' )表示字符串

let myName: string = 'iwen';


你还可以使用 模版字符串

let myName: string = 'iwen';
let myAge: number = 25;
// 模板字符串
let info: string = `Hello, my name is
${myName}.I'll be ${myAge + 1} years old next month.`;


数组



TypeScript 像 JavaScript 一样可以操作数组元素。 有两种方式可以定义数组。


第一种,可以在元素类型后面接上 [] ,表示由此类型元素组成的一个数组


第二种方式是使用数组泛型, Array<元素类型>


第一种:「类型 + 方括号」表示法

let list: number[] = [1, 2, 3];


第二种:数组泛型

let list: Array<number> = [1, 2, 3];


读取数组数据


无论是那种方式,读取的方式并没有发生变化

let list: number[] = [1, 2, 3];
console.log(list[1])
for(var i =0;i<list.length;i++){
  console.log(list[i])
}


任意类型


在JavaScript中,我们习惯了数组中可以存在任何类型的数据,在 TypeScript中,依然也可以

let list: any[] = ['itxiaotong', 10, { website: 'https://itxiaotong.com' }];


元组



数组合并了相同类型的对象,而元组(Tuple)合并了不同类型的对象


元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同


简单的例子


定义一对值分别为 string number 的元组

let info: [string, number] = ['iwen', 25]


使用元组的前提就是知道元素的数量和类型,这里顺序也是不能颠倒的

let info: [string, number] = [25,'iwen'] //报错


当访问一个已知索引的元素,会得到正确的类型

let info: [string, number] = ['iwen',25]
console.log(info[0])
console.log(info[0].substring(1))


也可以只赋值其中一项


但是当直接对元组类型的变量进行初始化或者赋值的时候,需要提供所有元组类型中指定的项

let info: [string, number]
info = ["it",30]
console.log(info[0])


越界


访问越界时,会直接报错

let info: [string, number] = ['iwen',25]
console.log(info[2]) // 报错


添加元素越界时,也会报错

let info: [string, number]
info = ["it",30,true] // 报错


任意值



有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。 这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。 这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。 那么我们可以使用 any 类型来标记这些变量


什么是任意值类型


如果是一个普通类型,在赋值过程中改变类型是不被允许的

let age:number = 30
age = "Hello" // 报错


但如果是 any 类型,则允许被赋值为任意类型

let age:any = 30;
age = "Hello";


未声明类型的变量


变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型

let age; // 默认不要给初始值
age = "Hello";
age = 30;


任意类型数组


在JavaScript中,我们习惯了数组中可以存在任何类型的数据,在TypeScript中,依然也可以

let list: any[] = ['itxiaotong', 10, { website: 'https://itxiaotong.com' }];
目录
相关文章
|
8天前
|
JavaScript
typeScript进阶(9)_type类型别名
本文介绍了TypeScript中类型别名的概念和用法。类型别名使用`type`关键字定义,可以为现有类型起一个新的名字,使代码更加清晰易懂。文章通过具体示例展示了如何定义类型别名以及如何在函数中使用类型别名。
25 1
typeScript进阶(9)_type类型别名
|
8天前
|
JavaScript
typeScript基础(2)_any任意值类型和类型推论
本文介绍了TypeScript中的`any`任意值类型,它可以赋值为其他任何类型。同时,文章还解释了TypeScript中的类型推论机制,即在没有明确指定类型时,TypeScript如何根据变量的初始赋值来推断其类型。如果变量初始化时未指定类型,将被推断为`any`类型,从而允许赋予任何类型的值。
25 4
|
8天前
|
JavaScript
typeScript基础(5)_对象的类型-interfaces接口
本文介绍了TypeScript中接口(interfaces)的基本概念和用法,包括如何定义接口、接口的简单使用、自定义属性、以及如何使用`readonly`关键字定义只读属性。接口在TypeScript中是定义对象形状的重要方式,可以规定对象的必有属性、可选属性、自定义属性和只读属性。
23 1
|
8天前
|
存储 JavaScript
typeScript进阶(11)_元组类型
本文介绍了TypeScript中的元组(Tuple)类型,它是一种特殊的数组类型,可以存储不同类型的元素。文章通过示例展示了如何声明元组类型以及如何给元组赋值。元组类型在定义时需要指定数组中每一项的类型,且在赋值时必须满足这些类型约束。此外,还探讨了如何给元组类型添加额外的元素,这些元素必须符合元组类型中定义的类型联合。
20 0
|
8天前
|
JavaScript
typeScript进阶(10)_字符串字面量类型
本文介绍了TypeScript中的字符串字面量类型,这种类型用来限制变量只能是某些特定的字符串字面量。通过使用`type`关键字声明,可以确保变量的值限定在预定义的字符串字面量集合中。文章通过示例代码展示了如何声明和使用字符串字面量类型,并说明了它在函数默认参数中的应用。
21 0
|
8天前
|
JavaScript
typeScript基础(1)_原始数据类型学习
本文介绍了TypeScript中的原始数据类型,包括布尔型、数值型、字符串型、`void`、`null`和`undefined`,并展示了如何在TypeScript中声明和使用这些类型。同时,还介绍了如何通过`tsc`命令编译TypeScript文件。
32 4
|
8天前
|
JavaScript 前端开发
typeScript基础(8)_ts类型断言
本文介绍了TypeScript中的类型断言,它用于在编译时告诉TypeScript某个对象具有特定的类型,即使它看起来不具备。类型断言可以用来访问一个类型上存在而另一个类型上不存在的属性或方法。需要注意的是,类型断言并不会在运行时改变JavaScript的行为,因此如果断言不当,运行时仍然可能出错。文章还提醒避免将类型断言为`any`类型或进行多重断言。
12 1
|
8天前
|
JavaScript
typeScript基础(6)_数组类型
本文介绍了TypeScript中数组的类型表示方法,包括直接使用类型加`[]`定义数组类型,以及使用数组泛型`Array<类型>`定义数组。同时,还展示了如何定义包含多种数据类型的数组。
20 1
|
6天前
|
JavaScript 前端开发 编译器
TypeScript,从0到入门带你进入类型的世界
该文章提供了TypeScript的入门指南,从安装配置到基础语法,再到高级特性如泛型、接口等的使用,帮助初学者快速掌握TypeScript的基本用法。
|
8天前
|
JavaScript
typeScript基础(7)_函数的类型
本文介绍了TypeScript中函数的类型,包括函数声明与函数表达式的类型注解,如何定义函数的参数类型、返回类型,以及可选参数和参数默认值。还探讨了函数的剩余参数、如何使用接口定义函数的形状,以及函数重载的概念和实践。
10 0
下一篇
无影云桌面