前言
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){  }
       复制代码
 
评论