Typescript类型

1. 安装 Typescript

npm install typescript -g

Mac电脑报错的话在前面加一个 sudo,即 sudo npm install typescript -g,然后输入电脑密码。

安装完后使用 tsc 命令测试一下。 tsc -v 查看版本

生成配置文件

使用 tsc -init

编译运行 ts 文件

1. 安装 ts-node,npm install ts-node -g

2. 新建 demo.ts 文件,在终端输入 ts-node demo.ts

2. TS类型

01_类型检测:

// 6种常用类型
let name : string = "游小北"
let age : number = 20
let bool : boolean = true
let un : undefined = undefined
let nu : null = null
let obj : object = { gender : "男" }

// 联合类型
let lianhe : string|number
lianhe = "string"
lianhe = 14
lianhe = true  // err 不能将类型“boolean”分配给类型“string | number”

export {}

02_定义数组类型:

// 不指定类型会有类型推导
let arr = [1,2,3]
// 联合类型,也可被推导
let arr1 = ["youxiaobei",2] // string | number

let arr3 : number[] = [1,2,3]
// 指定类型后不能随意往数组内赋值
let arr4 : number[] = ["string",123] // err 不能将类型“string”分配给类型“number”。

// 定义联合类型数组
let arr5 : (number | string)[] = [123,"string"]

// 定义有对象成员的数组
let arr6 : object[] = [{ name:"youxiaobei" },{ age: 19 }]
console.log(arr6);

03_定义函数:

function foo(num1: number, num2: number): number {
  return num1 + num2; // 返回值是数字类型,函数就是 :number
}
console.log(foo(123, 456));
//或者
let bar: (x: string) => number = function (x: string) {
  console.log(x.length); // 函数参数为数字类型
  return 123; // 返回值是数字类型,
};
console.log(bar("youxiaobei"));

// 函数的可选参数,注意可选参数必须在后面
let koo: (x: number, y?: number) => number = function (x: number, y?: number) {
  if (y) {
    console.log("输入了第二个参数");
  }
  return x;
};

koo(1, 2);
koo(3);

// 参数默认值
let boo: (x: number, y?: string) => number = function (
  x: number,
  y: string = "默认值"
) {
  console.log(y);

  return x;
};

console.log(boo(1, "hhhh"));

// 剩余参数
function pushArr(arr1: any[], ...items: any[]) {
  let newArr: any[] = arr1;
  items.forEach((item) => {
    newArr.push(item);
  });
  console.log(newArr);
}
let arr: any[] = [1, 2];
pushArr(arr);
pushArr(arr, [123], [456]);

04_元祖定义:

let yuanzu: [string, number, boolean]; // 元祖类型,数量类型都得对应
yuanzu = ["youxiaobei", 1, true];

// 当数量和类型都不确定,使用 any[]
let nuknown: any[];
nuknown = [1];
nuknown = ["youxiaobei"];
nuknown = [1, 2, 3, "string"];

// 解构
let emploee: [number, string] = [1, "youxiaobei"];
let [id, name] = emploee;
console.log(`id : ${id}`); //id : 1
console.log(`name : ${name}`); //name : youxiaobei

// 元祖可选元素
let choose: [string, boolean?];
choose = ["i can choose", true];
console.log(`choose : ${choose}`);
choose = ["i no choose"];
console.log(`choose : ${choose}`);

// 元祖剩余元素
let lefted: [string, ...number[]];
lefted = ["lefted meta", 1, 2, 3, 4, 5];
console.log(`lefted : ${lefted}`);
lefted = ["only one"];
console.log(`lefted : ${lefted}`);

// 只读 readonly 
let readonly: readonly [string, number] = ["i am readonly", 124];
readonly = ["i want get in", 123];
readonly = ["123", 123];
console.log(readonly); //可以赋值
// readonly[1] = 1234 //无法分配到 "1" ,因为它是只读属性
// readonly.push(1) //类型“readonly [string, number]”上不存在属性“push”
export {};

05_字符串字面量类型:

let derc : "top" = "top"
derc = "sss" // 不能将类型“"sss"”分配给类型“"top"”

type derction = "top" | "down";
let changederc = function (derc: derction) {
  console.log("改变了方向");
};

changederc("left"); // 类型“"left"”的参数不能赋给类型“derction”的参数
changederc("top");

// 数字字面量类型及布尔字面量类型
interface IConfig {
  number: 1 | 2 | 3;
  derc: "top" | "left" | "down" | "right";
  isEated: true | false
}

let test = function(user:IConfig) {
    // 接口定义类似对象的类型
}

export {}

test({
    number: 1 ,//不能将类型“4”分配给类型“1 | 2 | 3”。
    derc: "center", //不能将类型“"center"”分配给类型“"top" | "down" | "left" | "right"
    isEated: "yes" //不能将类型“string”分配给类型“boolean”
})

06_接口作用使用:

interface IConfig {
  // 此处定义的是字面量作类型限制,而不是类型符号
  number: 1 | 2 | 3;
  derc: "top" | "left" | "down" | "right";
  isEated: true | false;
}

let test = function (user: IConfig) {
  // 使用接口当作类型,减少代码冗余
  // 接口定义类似对象的类型
};

// 类型别名type覆盖,多次定义接口会合并,同一个接口定义多次合并为一个
interface I1 {
  number1: number;
}

interface I1 {
  number2: number;
}

const obj: I1 = { number1: 123, number2: 456 };
console.log(obj);

export {};

07_泛型:

// 泛型只在调用的使用被确定
let fanx = function <T>(args: T) {};

fanx<number>(123); // good
fanx<string>(123) // err 类型“number”的参数不能赋给类型“string”的参数。

// 泛型约束,继承接口,可为接口定义的类型
interface ItoExtend {
  name: string;
  age: number;
}

let personEat = function <T extends ItoExtend>(user: T) {
  console.log(`${user.name} is xxx!`);
};

personEat({ name: "游江川", age: 20 });

 08_types和interface:

// 两者定义对象和函数

// 1. type定义
type object1 = {
  name: string;
  age: number;
};

type function1 = (x: number, y: boolean) => void;

// 2. interface
interface Iobject2 {
  name: string;
  age: number;
}

interface Ifunction2 {
  (x: number, y: boolean): void;
}

let tp: function1 = function () {};
tp(1, true);

let inte: Ifunction2 = function () {};
inte(123, 12); // 类型“number”的参数不能赋给类型“boolean”的参数。


// 类型别名其他用法
// primitive
type Name = string;

// object
type PartialPointX = { x: number; };
type PartialPointY = { y: number; };

// union
type PartialPoint = PartialPointX | PartialPointY;

// tuple
type Data = [number, string];

// dom
let div = document.createElement('div');
type B = typeof div;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
TypeScript具有丰富的类型系统,可以帮助开发者在编码过程中捕获错误、提供代码补全和自动提示等功能。以下是一些常见的 TypeScript 类型: 1. 原始类型: - boolean: 布尔类型,只能是 true 或 false。 - number: 数字类型,包括整数和浮点数。 - string: 字符串类型。 - null 和 undefined: 分别表示空值和未定义值。 2. 数组类型: - 基本数组类型:例如 number[] 表示数字数组,string[] 表示字符串数组。 - 泛型数组类型:使用泛型语法定义特定类型的数组,例如 Array<number> 表示数字数组。 3. 元组类型: - 元组是固定长度和特定类型的数组。 - 例如 [string, number] 表示包含一个字符串和一个数字的元组。 4. 对象类型: - 对象类型可以使用字面量语法定义,例如 { name: string, age: number } 表示一个具有 name 和 age 属性的对象。 - 也可以使用接口(interface)或类(class)定义对象类型。 5. 函数类型: - 函数类型包括参数的类型和返回值的类型,例如 (a: number, b: number) => number 表示接收两个数字参数并返回一个数字的函数类型。 6. 枚举类型: - 枚举用于定义一组命名的常量值。 - 例如 enum Color { Red, Green, Blue } 定义了一个颜色的枚举类型,可以通过 Color.Red、Color.Green 等访问枚举值。 除了以上类型TypeScript 还支持联合类型、交叉类型类型别名、类型推断和泛型等高级特性,可以更灵活地应对各种编程场景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

John Rivers

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

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

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

打赏作者

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

抵扣说明:

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

余额充值