[TS基础]开发环境,类型的声明

一.开发环境的搭建

1.下载与安装-Node

  • 下载Node.js下载连接
    点击下载连接,下载对应版本的文件即可
  • 下载完成后进行安装
    一路next,注意选择安装路径,最后finish就ok了
  • 安装结束后,win+R输入cmd
    在命令行输入node -v,如果有对应的版本信息出现,即代表安装完成

2.使用npm全局安装TypeScript

  • win+R输入cmd
    命令行窗口中输入npm i -g typescript,安装TypeScript解析器
    等待读条安装即可
  • 安装完成后输入tsc -vtsc
    输出版本号或使用信息就代表安装完成了

3.Hello World!

  • 新建一个名为hello.ts的文件,打开编辑
    写下第一行代码,并保存
console.log("Hello wrold !");
  • 编译验证
    这个时候的ts文件还不能被浏览器识别,需要TypeScript编译才能执行
    在当前文件夹路径框输入cmd,命令行再输入tsc hello.ts即可完成对文件的编译
    这时候可以看到对应文件夹下生成了一个hello.js文件

二.TS的类型

1.TS类型的特性

  • 可以通过let [变量名] : [类型]指定一个变量的具体类型
    并且可以在声明的同时就进行赋值let num : number = 123;
    直接赋值时写法还可简化let num = 123;TS会自动判断变量的类型
//声明了一个类型为number的变量num
let num: number;
//声明类型之后,变量的类型就不能改变<->区别于JavaScript
// num = "123"; 是会报错的
num = 123;

//声明一个字符串类型,可以直接进行赋值
let str : string = "iFinder";

//声明时还有简化的写法,如果声明与赋值同时进行,TS可以自动对变量进行类型检测
let bool = false;
//之后用这个变量就是boolean类型
// bool = 123;  会报错
bool = true;
  • 相比JS来说TS可以更方便的定义入参的类型以返回值的类型
function [方法名]([变量1] : [类型], [变量2] : [类型], ...) : [返回值类型] {
	...
}
//JS中的函数是不考虑类型,个数的
function sum(a, b) {
    return a + b;
}
//输出结果:24
console.log(sum(num, num));
//输出结果1212
console.log(sum(num, "12"));

//相比之下TS的函数类型,可以指定入参的类型
function sumTs(a : number, b : number) {
    return a + b;
}
//这样的话在参数传入的时候就会做相应的检查,进而避免类型混乱而造成的错误
console.log(sumTs(123, 123));

//同样,函数的返回值类型也是能够被定义的
function appendStr(s1 : string, s2 : string) : string {
    return s1 + s2;
}
  • 补充:如何看到编写的函数的输出结果
    以VSCode为例,新建一个html文件,输入!生成默认模板
    然后在<body> </body>中添加TS文件编译后的JS文件的引用
    在浏览器中打开后,右键选择检查,找到console即可看到输出的结果
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="02.ts_type.js"></script>
    <script src="01.hello.js"></script>
</body>
</html>
  • 建议打开VSCode的自动保存功能,设置焦点改变立即保存,以免发生没保存却在一直编译,输出结果不变的尴尬情况

2. TS的数据类型

类型示例描述
number1, -33 , 2.2任意的数字
string“iFinder”, “Nancy”任意字符串
booleantrue, false布尔值
any*任意类型
unknown*类型安全的any
void空值(undefined)没有值或者undefined
never没有值不能是任何值
object{name:“iFInder”}任意的JS对象
array[1, 2, 3, 4, 5]任意的JS数组
tuple[4 ,5]元素,TS新增类型,固定长度数组
enumenum{A1, B1, C1}枚举类型, TS新增类型
字面量其本身限制变量的值就是该字面量的值

2.1 字面量与联合类型

  • 可以用字面量来当作一种类型,使用后变量只能等于字面量
  • 可以用|符号来定义多种类型,这样的类型叫做联合类型
/**字面量 与 联合类型 */
//可以直接使用字面量进行类型声明
let a : 10;
a = 10;
// a = 11;  会报错,用字面量声明后值不可修改

//可以用 | 来限制字面量的范围
//这样该变量只能是这几个字面量中的任意一个
let student : "iFinder" | "Nancy" | "Bob";

//甚至可以通过 | 来为同一个变量指定多个类型
let age : number | string;
age = 24;
age = "35";
//上边的多个类型的用法叫做-->联合类型

2.2 any与unknown类型

  • 变量定义为any之后类型不会被限制,并且可以赋值给其它的变量
    但是这样使用是很不安全的,开发中不建议使用
  • unknown也不限定值的类型,但是它不能赋值给其它的变量
    所以unknown可以理解为类型安全的any类型
  • 使用unknown后可以结合typeof类型断言来进行类型的判断
/**any类型与unknown类型 */
let every1 : any;
every1 = 123;
every1 = "iFinder";
every1 = true;
//注意:声明变量时不指定类型的话,TS会默认类型为any
let test; //这里声明的结果就是any类型--隐式any
//一个变量设置any后,相当于对它关闭了TS变量的类型检测

//类型安全的any类unknown
let every2: unknown;
every2 = "iFinder";
//any与unknow的区别:
//any类型可以赋值给其它的变量,而unknown类型的值是不能赋值给其它变量的
let str:string;
str = every1; // 不报错TS允许
//str = every2;报错,unknown不能赋值给其它变量

//解决办法1:类型检查
if (typeof every2 === "string") {
    str = every2;
}
//解决办法2:类型断言,告诉编译器变量的实际类型
str = every2 as string;
str = <string>every2;

2.3 void 与 never

  • void一般指定函数不返回或返回值为空
  • never让该函数连空都不会返回,一般用在异常处理
/**void 与 never -- 设置无返回值的函数 */
//不指定返回值类型的时候TS会进行动态的判断
function fun1(num) {  //此时的返回值为复合类型 boolean | string
    if (num > 0) {
        return true;
    } else {
        return "error";
    }
    
}

//void 表示空,没有返回值的函数
function fun2() : void {
    // return;
    // return undefined;
    //或者没有return都可以
}
//never 表示连空都没有,一般用在异常中断
function error1(errorCode) : never {
    throw new Error("error code" + errorCode);
}

2.4 object类型

  • 开发时通过{属性名1: 类型1, 属性名2: 类型2, ...}表示一个对象,与其携带的属性
  • 在属性名后加上?可以表示可选属性
  • 使用[属性名: string] : 类型的方式,可以指定任意多个对象的属性
  • 可以通过(形参1: 类型, 形参2: 类型, ...)=>类型的语法来限制返回值的类型
/**object类型-表示一个JS对象 */
let oc:object;  //但是这种写法没有意义
//对象也可以这么表示
oc = {};
oc = function() {};
//开发的时候我们使用对象其实是更倾向于使用该对象的属性的,可以直接这么写
//表示oc2这个变量指向了一个 内部有name属性的对象
let oc2: {name: string};
oc2 = {name: "iFinder"};
//{}用于指定对象中可以包含那些属性 {属性名1 : 属性类型1, 属性名2: 属性类型2, ...}
//属性名之后加上 ? 表示可选属性,赋值对象时可以缺失
let human: {name: string, age?: number};
human = {name: "iFinder", age: 24};
human = {name: "Nancy"};  //可选属性是可以缺失的
//[属性名 : string] : unknown可以指定任意数量的属性
let oc3: {name: string, [propName: string]: unknown};
oc3 = {name:"Cat", weight: "13kg", age: 5};

//与之类似的可以指定函数的入参与返回值的结构
//表示限制fun为有两个入参类型为number并且返回值类型为number的函数
let fun: (num1: number, num2: number)=> number;
fun = function(a, b): number {
    return a + b;
}

2.5 array与tuple

/**array类型 */
//字符串数组
let strArr: string[];
let strArr1: Array<string>;
strArr1 = ['a', 'b', 'c'];
//number数组
let numArr: number[];
let numStr1: Array<number>;
numArr = [1, 2, 3];

/**tupel 元组:固定长度的数组 */
let strTup: [string, number];
strTup = ['one', 123];  //长度固定,类型固定

2.6 enum枚举类型

/**enum 枚举类型 */
enum Gender {
    Male,
    Female
}

let humanBean : {name: string, gender: Gender};
humanBean = {
    name: 'iFinder',
    gender: Gender.Male
}
console.log(humanBean.gender === Gender.Male);

2.7 类的别名与合并对象

//表示需要同时满足两个变量的属性
let mix: {name: string} & {color: number}; 
mix = {
    name: "mix12",
    color: 126
}

/**类型的别名 */
//通过type起名,方便同一类型的复用
type myType = string | number | boolean;
let test1: myType;
let test2: myType;

笔记说明

笔记markdown文件+项目源码
B站对应视频

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TSTypeScript)是一种静态类型检查的高级编程语言,它是JavaScript的超集。在TS中,基础类型和泛型都是其重要的概念。 基础类型指的是TS中预定义的简单数据类型,例如:number、string、boolean、null、undefined等。基础类型用于表示变量或函数的数据类型,可以直接赋值给变量,也可以用作函数的参数和返回值类型基础类型的定义和使用非常简单,只需要在变量或函数的类型声明中指定即可。 泛型(Generic)是一种在编程中广泛使用的概念,它允许我们在定义函数、类或接口时使用可变的类型。使用泛型可以提高代码的复用性和灵活性。在TS中,使用<>符号来声明使用泛型,并通过类型参数来指定具体的类型。 例如,定义一个泛型函数: function identity<T>(arg: T): T { return arg; } 这个函数使用了泛型类型参数T,可以接受不同类型的实参,并返回相同类型的值。通过使用泛型,我们可以传入任意类型的参数,而不需要重写多个函数。 另外,在TS中还可以使用泛型约束来限制泛型类型的操作。通过在泛型类型参数后面添加extends关键字和约束类型,可以确保传入的类型必须满足特定条件。 总结起来,TS中的基础类型和泛型都是为了增强代码的可读性、可维护性和可靠性而设计的。基础类型用于定义简单的数据类型,而泛型则用于创建更灵活和可复用的函数、类和接口。在实际开发中,合理使用基础类型和泛型,可以提高代码的质量和开发效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值