写点什么

Typescript- 数据类型

  • 2023-04-24
    广东
  • 本文字数:2375 字

    阅读完需:约 8 分钟

Typescript- 数据类型

前言


TypeScript 是一种基于 JavaScript 的编程语言,它提供了丰富的数据类型,包括基本类型、高级类型和特殊类型。本文将介绍其中一些常用的类型,包括 any 类型、unknown 类型、void 类型、never 类型、tuple 类型、function 类型、class 类型和 union 类型。

any 类型

any 类型是一种特殊类型,它可以表示任何类型的值,即在编写代码时不进行类型检查,允许任何类型的值传递给任何变量或函数参数。使用 any 类型可以方便地处理动态类型数据和第三方库的类型问题,但也会导致类型安全问题。

let message:any = "hello wrold"
message=123message=truemessage={
}console.log(message);
复制代码



unknown 类型

unknown 类型是 TypeScript 3.0 中引入的新类型,它与 any 类型类似,也可以表示任何类型的值,但需要在使用前进行类型检查,用于描述类型不确定的变量。使用 unknown 类型可以确保类型安全,避免在运行时出现类型错误。与 any 类型不同,unknown 类型不允许进行任何操作,只有在进行类型检查后才能进行操作。

function foo() {  return "abc";}
function bar() { return 132;}
let flag = true;// unknow类型只能赋值给any和unknown类型// result变量不确定类型,有可能string或者numberlet result: unknown;if (flag) { result = foo();} else { result = bar();}
console.log(result);
复制代码



void 类型

void 类型表示函数没有返回值,通常用于定义没有返回值的函数。例如,一个函数执行某些操作但不返回任何值,可以使用 void 类型来定义。

// 没有返回值void可写可不写,// 没有返回值默认返回undefinedfunction sum(num1: number, num2: number): void {  console.log(num1 + num2);}
// 定义返回值类型function sum2(num1: number, num2: number): number { return num1 + num2;}
复制代码

never 类型

never 类型表示一个永远不会有返回值的函数或表达式,通常用于表示不可能到达的代码段。例如,在一个函数中抛出异常或进入无限循环,都会导致函数返回 never 类型。

// 死循环function foo(): never {  while (true) {}}
// never应用在什么场景?// 来着知乎的一个案例// 运行直接报错,提示case要加上booleanfunction handlerMessage(message: string | number | boolean) { switch (typeof message) { case "string": console.log("string"); break; case "number": console.log("number"); break; default: const check: never = message; }}
handlerMessage("123");handlerMessage(123);handlerMessage(true); // 报错
复制代码

tuple 类型

tuple 类型表示一个有序的固定长度数组,其中每个元素可以是不同的类型。例如,一个长度为 2 的 tuple 类型可以定义为[string, number],其中第一个元素是字符串类型,第二个元素是数字类型。

//tuple元组:多种元素的组合const info: any[] = ["why", 18, 1.88];const name = info[0]; //any类型,无法得到拿到的元素的类型
//元组写法const info1: [string, number, number] = ["abc", 18, 1.88];const name1 = info1[0]; //string类型
//应用场景function useState<T>(state: T) { //any全替换成T let currentState = state;
const changeState = (newState: T) => { currentState = newState; };
//第一个any类型,第二个数组类型 const tuple: [T, (newState: T) => void] = [currentState, changeState];
return tuple;}
const [counter, setCounter] = useState(10);setCounter(1000);const [title, setTitle] = useState("abc");const [flag, setFlag] = useState(true);
复制代码

function 类型

function 类型表示函数类型,可以用来定义函数的输入参数和返回值类型。例如,一个函数的类型可以定义为(number, string) => boolean,表示该函数接受一个数字和一个字符串作为参数,返回一个布尔值。

//给参数加类型注解//默认返回值void,不写返回值类型会自动推导function sum(num1: number, num2: number): number {  return num1 + num2;}
//匿名函数的参数类型//可写可不写,item根据上下文环境推导出来,可以不添加类型注解const names = ["abc", "cba", "bac"];names.forEach((item) => { console.log(item);});
复制代码

object 类型


function printPoint(point: { x: number; y: number }) {  console.log(point.x);  console.log(point.y);}
printPoint({ x: 123, y: 456 });
//可选类型加?可传可不传function printPoint1(point: { x: number; y: number; z?: number }) { console.log(point.x); console.log(point.y); console.log(point.z);}
printPoint1({ x: 123, y: 456 });printPoint1({ x: 123, y: 456, z: 789 });
复制代码


union 类型

union 类型表示一个值可以是多种类型中的一种。例如,一个变量可以定义为 string | number,表示该变量可以是字符串类型或数字类型。

总之,TypeScript 提供了丰富的数据类型,包括基本类型、高级类型和特殊类型。开发人员可以根据实际需求选择合适的数据类型,提高代码的可读性、可维护性和可靠性。

//联合类型由两个或多个其他类型组成的类型,可以是这些类型中的任何一个值function printId(id:number | string){ //联合类型  //narrow:缩小  if(typeof id == 'string'){    console.log(id.toUpperCase());  }else{    console.log(id);  }}printId(123)printId("123")

//参数可选可不选//一个参数一个可选类型的时候,本质上表示这个参数是 类型|undefined 的联合类型function foo(message?:string){ //string | undefined console.log(message);}foo()foo("123")
//type定义类型别名type IDtype = string | number | booleanfunction p(id:IDtype){
}
type Ptype = { x:number, y:number, z:number}function p2(point:Ptype){ }
复制代码


发布于: 刚刚阅读数: 4
用户头像

你若毁我天堂,我必戳你脊梁 2022-11-01 加入

还未添加个人简介

评论

发布
暂无评论
Typescript- 数据类型_typescript_格斗家不爱在外太空沉思_InfoQ写作社区