TypeScript 配置环境 & 初时Type变量❀
配置环境❀
-
安装Node.js:https://nodejs.org/zh-cn
-
可以根据百度教程来配置:https://developer.aliyun.com/article/832078
-
使用npm命令全军安装TypeScript
- 打开CMD
- 输入:
npm i -g typescript
-
编译Ts为Js代码
tcs 文件.ts
类型名 | 示例 | 说明 |
---|---|---|
number | 1,2,3 | 数值 |
string | 'Hello' | 字符串 |
boolean | true\false | 布尔值 |
字面量 | 其本身 | 限制变量的值就是该字面量的值 |
any | * | 任何类型 |
unknown | * | 类型安全的any |
vold | 空值undefined | 没有值(或undefined) |
never | 没有值 | 不能是任何值 |
object | {'name':'Ts'} | 任意的json对象 |
array | [1, 2, 3] | 任意json数组 |
tuple | [4, 5] | 元素,TS新增类型,固定长度的数组 |
enum | enum{A, B} | 枚举,TS中新增类型 |
TS类型❀
// 可以给变量设置类型,也可以给函数设置类型
// 变量其实也可以不声明,在赋值的时候会自动对变更进行类型检查
// a变量只能被设置为数值
let a: number;
a = 10;
// a变量只能被设置为数值
let b: boolean = true;
// 赋值为了布尔值,再赋值为其他类型就会收到提醒
let c = false;
// JS中本身是不考虑参数的类型和个数的
// 设定了参数类型,就只能传指定参数,否则编辑器会有提示
// 参数可以设置类型外,函数也可以设置返回值的类型
function sum(a: number, b: number): number {
return a + b;
}
console.log(sum(123, 456))
// 可以直接使用字面量进行类型声明,类似常量
let a: 10;
// 赋值为其他数值就会报错
// a = 12;
// 可以设置多个指定类型或者值(联合类型)
let b: "male" | "female";
b = "male";
b = "female";
let c: boolean | string;
c = true;
c = "hello";
/************************************************** */
// any 表示任意类型,关闭当前变量的变量检测(尽量避免使用)
let d: any;
// let d; //只声明不指定类型,TS解析器会自动判断变量类型为any(隐式any)
d = 10;
d = "hello";
d = true;
/************************************************** */
// unknown 表示未知类型的值
let e: unknown;
e = 10;
e = "hello";
e = true;
/************************************************** */
// any 和 unknown 的区别
let f: string;
// 设置虽然 string 但赋予变量为 any 类型,导致变量 string 赋予了 boolean 值
f = d;
// 如果 string 要设置为 unknown 的变量就会对 unknown 最后一次赋予的值进行检测
// 如果类型不一致就会报错,这也是不推荐使用 any 的原因
// unknown 类型的变量不能直接赋值给其他变量
// 可以用类型判断来赋值,告诉TS这就是字符串,您可以安全赋值
if (typeof e === "string") {
f = e;
}
// 类型断言(判断语言),同于上方if方法
f = e as string;
f = <string> e;
/************************************************** */
// void 表示为空,以函数为例,就表示没有返回值的函数
function fn(): void {
return
}
// never 表示不会返回结果,什么都不会返回,抛出错误
function fn2(): never {
throw new Error('报错了!')
}
// object 表示一个json对象
let a: object;
a = {};
a = function (){};
// {}表示 b 是一个对象,并且里面需要有一个name属性,并且值为字符串
// 语法:{属性名: 属性值, 属性名: 属性值}
// 加一个?为可选属性
let b: {name: string, age?: number};
b = {name: 'TS'};
b = {name: 'TS',age: 18};
// [propName: string]: any 表示任意类型的属性
let c: {name: string, [propName: string]: any};
c = {name: 'TS', a:1, b:2}
/**
* 设置函数结构的类型声明:
* 语法: (形象: 类型, 形象: 类型...)=> 返回值
*
* 表示 d 我希望是一个函数,并且有两个参数,两个参数是number,返回值也是number
*/
let d: (a: number,b: number)=>number;
d = function (a, b): number {
return a + b;
}
/************************************************** */
/**
* 数组的类型声明:
* 类型[]
* Array<类型>
*/
// string[] 表示字符串数组
let e: string[];
e = ['a', 'b', 'c']
// number[] 表示数值数组
let f: number[];
// 同上的声明方式
let g: Array<number>;
g = [1, 2, 3];
/************************************************** */
/**
* 元组,固定长度的数组
* 语法:[类型, 类型, 类型]
*/
// 表示这个元组有两个值,且都是string
let h: [string, string];
h = ['Hello', 'Ts'];
/************************************************** */
/**
* enum 枚举
*/
// 设置一个枚举类
enum Gender {
Male,
Female
}
let i: {name: string, gender: Gender}
i = {
name: 'Ts',
gender: Gender.Male
}
console.log(i.gender === Gender.Male)
/************************************************** */
// & 表示同时
let j: {name: string} & {age: number};
j = {name: 'Ts', age: 18};
// 类型的别名
type myType = 1 | 2 | 3 | 4 | 5;
let k: myType;
k = 5;