【TS笔记】数据类型

时间:2025-04-08 08:11:28

基础类型

1.布尔值(Boolean)

   let isDone: Boolean = false;
  • 1

2.数字(number)

   let num: number = 123;
   let num2: number = 0xf00d; 
  • 1
  • 2

3.字符串(string)

   let person: string = "小明";   
   person = '笑笑'

   let person2: string = "小华";
   let age = 20;
   let sentence: string = `Hello,my name is ${person2}. I'll be ${age} years old next month.`;

   let sentence2: string = "Hello,my name is" + person + ".\n\n" + "I'll be" + (age + 1) + "years old next month.";
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4.数组(Array)

   let list: number[] = [1, 2, 3];

   let list2:Array<number> = [1, 2, 3];
  • 1
  • 2
  • 3

5.元组(Tuple) (元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。)

  let x: [string, number];

   x = ['hello', 10];
  //  x = [20, "hello"]  Error
  //  x = ["hello", 20 ,30]  Error

  (x[0].substr(1)); 
  // (x[1].substr(1)); Error
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

6.枚举(enum) (enum类型是对JavaScript标准数据类型的一个补充。 像C#等其它语言一样,使用枚举类型可以为一组数值赋予友好的名字。)

enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];
  • 1
  • 2

枚举类型提供的一个便利是你可以由枚举的值得到它的名字。 例如,我们知道数值为2,但是不确定它映射到Color里的哪个名字,我们可以查找相应的名字:

alert(colorName);  // 显示'Green'因为上面代码里它的值是2
  • 1

7.任意值(any)

   let notSure: any = 4;
   notSure = 'maybe a string instead'
   notSure = false 
  • 1
  • 2
  • 3

在对现有代码进行改写的时候,any类型是十分有用的,它允许你在编译时可选择地包含或移除类型检查。 你可能认为Object有相似的作用,就像它在其它语言中那样。 但是Object类型的变量只是允许你给它赋任意值 - 但是却不能够在它上面调用任意的方法,即便它真的有这些方法

   ();
   ();

   let prettySure: Object = 4;
  // (); //类型“Object”上不存在属性“toFixed”。
  • 1
  • 2
  • 3
  • 4
  • 5

当你只知道一部分数据的类型时,any类型也是有用的。 比如,你有一个数组,它包含了不同的类型的数据:

  let arr: any[] = [1, true, "free"];

   arr[1] = 100;
  • 1
  • 2
  • 3

8.空值(void)(某种程度上来说,void类型像是与any类型相反,它表示没有任何类型.当一个函数没有返回值时,你通常会见到其返回值是void)

  function warnUser(): void{
  return alert("this is my message");
  } 
  • 1
  • 2
  • 3

声明一个void类型的变量没有什么大用,因为你只能为它赋予undefined

   let unusable: void = undefined;
  • 1

和undefined(undefined和null两者各自有自己的类型分别叫做undefined和null。 和void相似,它们的本身的类型用处不是很大)

  let u:undefined = undefined;
  let n:null = null;
  • 1
  • 2

(never类型表示的是那些永不存在的值的类型。 例如,never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型)

 返回never的函数必须存在无法达到的终点
  function error(message:string): never{
    throw new Error(message)
  }
  • 1
  • 2
  • 3
  • 4
 推断的返回值类型为never
    function fail():never {
      return error("Something failed");
    }
  • 1
  • 2
  • 3
  • 4
返回never的函数必须存在无法达到的终点
    function infiniteLoop(): never {
      while (true) {
      }
    }  
  • 1
  • 2
  • 3
  • 4
  • 5
//  function get(): never{  //Error 返回“never”的函数不能具有可访问的终结点
//     alert(123)
//   }
  • 1
  • 2
  • 3

(object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型)

    declare function create(o: object | null ): void;
    create({ prop: 0 }); 
    create(null);
    
   //  create(1234)//Error
   //  create("string"); // Error
   //  create(false); // Error
   //  create(undefined); // Error
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

类型断言

1.尖括号法:

  let someValue:any = "this is a string";
  let strlength:number = (<string>someValue).length;
  • 1
  • 2

语法:

  let someValue2:any = "this is a string";
  let strlength2:number = (someValue2 as string).length
  • 1
  • 2
  两种形式是等价的。 至于使用哪个大多数情况下是凭个人喜好;然而,当你在TypeScript里使用JSX时,只有as语法断言是被允许的。   
  • 1