原文: https://howtodoinjava.com/typescript/typescript-types/

TypeScript 支持对基本类型(原始类型和对象类型)进行类型检查。 它还支持泛型,装饰器和 ES6 模块类型。 重要的是要知道 TypeScript 中的类型系统设计为可选。 因此,所有 javascript 程序也都是 TypeScript 程序。

  1. Table of Contents
  2. Static types
  3. - Primitive Types
  4. - Object Types
  5. Generics
  6. Decorators

1)静态类型

在语言语义和类型系统的上下文中,静态类型通常表示“在编译时”或“不运行程序”,而动态表示“在运行时”。 在静态类型语言中,变量,参数和对象成员具有编译器在编译时就知道的类型。 编译器可以使用该信息执行类型检查并优化编译的代码。

TypeScript 中的静态类型可以分为两个子类型:

1.1)基本类型

TypeScript 具有 5 种主要基本类型,即numberstringbooleanvoidany

number

用于定义类型为number的变量。

  1. let num: number = 123;
  2. num = 123.456;
  3. num = '123'; // Error

string

用于定义string类型的变量。

  1. let str: string = 'hello';
  2. str = 'world';
  3. str = 123; // Error

boolean

用于定义boolean类型的变量。

  1. let bool: boolean = false;
  2. bool = true;
  3. bool = 123; // Error

void

  1. 用于函数返回类型以表示非返回函数。
    1. function warnUser(): void {
    2. alert("This is my warning message");
    3. }
  1. 声明 void 类型的变量没有用,因为只能将 undefinednull 分配给它们。

    1. let tempVar: void = undefined;
    2. tempVar = null;
    3. tempVar = 123; //Error

any

当您想退出类型检查并让值通过编译时检查时,请使用any

  1. let val: any = 'hello';
  2. val = 123; // OK
  3. val = true; // OK

|

1.2)对象类型

TypeScript 支持以下对象类型。

数组

数组是相同数据类型的值的集合。

  1. var names:string[]; //declaration
  2. names = ["how","to","do","in","java"]; //initialization

元组

元组就像数组; 但存储“不同数据类型”的值。 就像数组一样,它也是基于索引的数据结构。

  1. var items; //declaration
  2. items = ["how", 2, "do", 1 , true]; //initialization

接口

接口定义派生成员类必须实现的属性,方法和事件。

  1. interface ICalc {
  2. add (first: number, second: number): any;
  3. }
  4. let Calculator: ICalc = {
  5. add(first: number, second: number) {
  6. return first + second;
  7. }
  8. }

类是用于创建对象的模板。 Typescript 从 ES6 获得对类的支持。

  1. class Person {
  2. //field
  3. name:string;
  4. //constructor
  5. constructor(name:string) {
  6. this.name = name;
  7. }
  8. //function
  9. speakName():void {
  10. console.log("Name is : "+this.name)
  11. }
  12. }

枚举

与其他编程语言一样,枚举是由一组命名值组成的数据类型。 名称通常是充当常量的标识符。 ES6 中引入了枚举。

  1. enum Direction {
  2. Up,
  3. Down,
  4. Left,
  5. Right
  6. }
  7. let go: Direction;
  8. go = Direction.Up;

函数

在 TypeScript 中,我们可以声明仅在函数生命期内指向函数的变量。

  1. let fun: Function = () => console.log("Hello");
  2. fun = 123; //Error

2)泛型

泛型允许创建一个可以在多种类型而不是单个类型上工作的组件。 例如:

  1. function throwBack<T>(arg: T): T { //Function return the parameter as it is
  2. return arg;
  3. }
  4. let outputStr = identity<string>("myString"); //OK
  5. let outputNum = identity<number>( 100 ); //OK

3)装饰器

一般而言,装饰器是注解。 它们与'@'符号一起使用。 它允许我们修饰类和函数,类似于 java 中的注解和 python 中的装饰器。

装饰器是一项新功能,很可能会纳入 JavaScript 的 ES7 版本。 但是该功能在 TypeScript(实验性)中可用,因此我们已经可以使用它了。

如何使用装饰器

了解每个装饰器都是 javascript 函数,这一点很重要。 要创建装饰器,请创建如下函数:

  1. function printable ( target ) {
  2. Object.defineProperty(target.prototype, 'print', {value: () => "Lokesh Gupta"});
  3. }
  4. @printable
  5. class Person {
  6. }
  7. let admin = new Person();
  8. console.log(admin.print()); // Lokesh Gupta

TypeScript 中的类型系统就这些了。 将我的问题放在评论部分。

学习愉快!