2021-12-23 typescript学习笔记(一) Typescript的介绍和安装使用,类型注解,Typescript的数据类型

本文是TypeScript学习笔记的第一部分,主要介绍了TypeScript的基础知识,包括它的介绍、特点、安装与使用,以及核心的数据类型如基本类型、数组、元组、枚举等。通过示例代码展示了如何进行类型注解,帮助理解TypeScript的强类型特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.介绍

1.TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准(ES6 教程)。
2.TypeScript 由微软开发的自由和开源的编程语言。
3.TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。

1.为什么要学习 TypeScript?

TypeScript 让我们的代码更可靠更清晰。
TypeScript 是 JavaScript 超集,完全兼容所有 JavaScript 语法规则。

2.Typescript的特点

1.始于JavaScript,归于JavaScript

TypeScript 可以编译出纯净、 简洁的 JavaScript 代码,并且可以运行在任何浏览器上、
Node.js 环境中和任何支持 ECMAScript 3(或更高版本)的JavaScript 引擎中。

2.强大的类型系统

类型系统允许 JavaScript 开发者在开发 JavaScript 应用程序时
使用高效的开发工具和常用操作(如静态检查和代码重构。)

3.先进的 JavaScript

TypeScript 提供最新的和不断发展的 JavaScript 特性,
包括那些来自 2015 年的 ECMAScript 和未来的提案中的特性,
比如异步功能和 Decorators,以帮助建立健壮的组件。
3.安装和使用
安装命令:npm install -g typescript
检查:`tsc -V
helloworld.ts

编写如下代码

function say (data) {return 'Hello, ' + data}
console.log(say('world'))

在终端输入:tsc helloworld.ts,生成一个同名的js文件,
node运行此js文件:node helloworld.js
输出:hello world

4.让vscode自动编译出同名js文件
(1)  生成配置文件tsconfig.json
    tsc --init
(2) 修改tsconfig.json配置
    "outDir": "./js",
    "strict": false,    
(3) 启动监视任务: 
    终端 -> 运行任务 -> 监视tsconfig.json
5.类型注解

TypeScript 里的类型注解是一种轻量级的为函数或变量添加约束的方式

示例:接上例,给say函数的参数添加 string 类型注解
function say (data: string) {return 'Hello, ' + data}
console.log(say('world'))

此时data只能是一个字符串,否则报错:

error TS2345: Argument of type 'number[]' is not assignable to parameter of type 'string'.
6.TypeScript 数据类型
6.1.Typescript的基本数据类型

TypeScript 对比 JavaScript 来讲是一门强类型语言,不能更改原有的类型

示例:Typescript不能更改原有类型

JavaScript

let a = '1';
a = 1;
console.log(typeof(a)); // Number

Typescript:

let a = '1';
a = 1; // Type '1' is not assignable to type 'string'
Typescript定义变量的方式:let a: string = '1'

类似的还有

let a: string = '1';
let num: number = 1;
let ifLogin: boolean = false;
anything
let anything;// 一种特殊的类型
anything = 1;
anything = '1';

可以不对当前值做初始化,此时变量可以被赋值为任意值。等同于:let anything: any;

6.2.Typescript的数组类型
在 TypeScript 中数组的原型写法
let name: Array<string> = ['a','b']
console.log(name[0]);

前面的 Array 是 name 这个变量的值的类型,
<>里面的string是数组里面的值的类型。

其他写法
let numbers: Array<number> = [1, 2, 3];
let numbers: number[] = [1, 2, 3];
let anyArray: any[] = [1, '2', false];
6.3…Typescript的元组类型(tuple)

在数组里面设置多个类型值:let box: [string, number] = ['hello', 2];
与数组的区别:元组的长度是有限的,而且分别为每一个元素定义了类型

6.4.Typescript的枚举(enum)

枚举:组织收集一组相关变量的方式。

字符串枚举
字符串枚举

```typescript
enum Color{
    Black,
    Yellow,
    Red
}
let myColor: Color = Color.Red;
console.log(myColor); // 输出 3

枚举存的是数值,而不是属性 Red

字符串枚举类型允许使用字符串来初始化枚举成员
enum SIJI {
    chun = '春',
    xia = '夏',
    qiu = '秋',
    dong = '冬'
}
console.log(SIJI.chun,SIJI.xia,SIJI.qiu,SIJI.dong)//春夏秋冬
数字的枚举:下标从0开始,也可以自行设置枚举成员的初始值,它们会依次递增
6.5.变量类型
number 类型(Infinity, -Infinity, NaN 也属于Number类型)
let num1 : number = 20;
let num2 : number = 175.5;
let a1 : number = Infinity; //正无穷大
let a2 : number = -Infinity; //负无穷小
let a3 : number = NaN;
undefined 类型的数据只能被赋值为 undefined
let un : undefined = undefined;

在 typescript中,已声明未初始化的值要直接访问的话,类型需要定义为undefined

null 类型只能被被赋值为null
let nu : null = null;
null和undefined的区别
null是一个空指针对象,
undefined是未初始化的变量
可以把undefined看成一个空变量,把unll看成一个空对象。
默认情况下,undefinednull 类型,是所有其它类型的子类型,
也可以说成,它们可以给所有其他类型赋值
string 类型
let str : string = '你好!'//值类型
let str1 : String = new String('你好!')//引用类型
boolean 类型
let boo : boolean = true;
let boo1 : boolean = false
symbol类型的值是通过Symbol构造函数创建的
let sy : symbol = Symbol('bar');
6.6.函数类型
let myfunc;
//这里的 myfunc 是 void 类型,可以存储不同的函数
function say():void { console.log('hahaha');}
myfunc = say;
myfunc();       // 输出 hahaha

function box(val1:number, val2:number){ return val1 + val2}
myfunc = box;
myfunc(5, 5);   // 输出 10
6.7.函数的相关类型
返回值的类型
function returnVal1():string{ return 'hello';}
console.log(returnVal1())//hello

function returnVal2():string{return 100;}
console.log(returnVal2()) //打印报错
参数返回值
function box(val1,val2){return val1+val2}
box(1, '2');    // 输出 '12';
// 等同于
function box(val1:any, val2:any){return val1 + val2}
box(1, '2');    // 输出 '12';
// 可以定义类型
function box(val1:number, val2:number){return val1 + val2}
box(1, 2);      // 输出 3
box(1, '2');    //报错
设置返回值类型
function box(val1:number, val2:number):number{return val1 * val2}
box(1, 2);      // 输出 3
6.8.对象类型
let obj = {
    name: "cheng",
    age: 20
};
obj = {}// 报错:因为初始化的时候已经给 obj 这个对象设置了属性和属性值类型 
 
obj = {
    a: 'cheng',
    b: 20
}// 报错:因为初始化的时候已经给 obj 设置格式, 包含了 name,age 所以在 obj 里面要有 name 和 age             

正确写法

let obj:{name: string, age: number} = {
    name: "cheng",
    age: 20
};
obj = {//obj 里面要有 name 和 age             
    name: 'wu',
    age: 18
} 

复杂对象类型

let comp: {data: number[], myfunc:(itme: number)=> number[]} = {
    data: [1, 2, 3],
    myfunc: function(itme: number):number[]{
        this.data.push(itme);
        return this.data;
    }
};
console.log(comp.myfunc(20)); // 输出 [1, 2, 3, 20]
6.9.type 生成类型
type IType = {data: number[], myfunc:(itme: number)=> number[]};
let comp: IType = {
    data: [1, 2, 3],
    myfunc: function(itme: number):number[]{
        this.data.push(itme);
        return this.data;
    }
};
console.log(comp.myfunc(10)); // 输出 [1, 2, 3, 10]
6.10.union type类型
let unionType:any = 12;
unionType = '12';
let a:number| string| boolean = 12;
a = '12';
a = true;
a = {}; // 报错
6.11.检查类型
let checkType = 10;
if(typeof checkType == "number"){
    console.log('number');
}
6.12.never类型

never 类型是任何类型的值类型,也可以赋值给任何类型。
然而没有类型是 never 的子类型或可以赋值给 never 类型(除了 never 本身之外)。
any 也不可以赋值给 never。
通常表现为抛出异常或无法执行到终止点(例如无线循环)。

let x:never;
x = 12; // 报错: 不能将其他类型转为 never 类型
let y: number;
y = (()=>{
    throw new Error(msg)
})();
never 类型的使用场景

never 的应用场景

  • 抛出异常
 function error (msg: string):never {
    throw new Error(msg)
}
  • 死循环
function loop():never{
    while (true){}
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端OnTheRun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值