📜  什么是类型别名以及如何在 Typescript 中创建它?

📅  最后修改于: 2022-05-13 01:56:15.781000             🧑  作者: Mango

什么是类型别名以及如何在 Typescript 中创建它?

在 Typescript 中,类型别名为类型赋予了新名称。它们与接口相似,因为它们可用于命名原语以及您必须手动定义的任何其他类型。别名并不能真正创建新类型;相反,它为该类型提供了一个新名称。给基元起别名不是很实用,因为使用基元类型很容易,但是,它可以用于文档目的。类型别名只是为类型提供另一个名称。让我们演示几个关于类型别名的示例。

示例 1:创建类型别名

在本例中,我们创建了一个名为 type_alias 的类型别名。新类型是数字、字符串和布尔值的联合。如果使用该类型声明了新变量,则可以为新变量指定仅属于 number、 字符串或 boolean 类型的值。

Javascript
// A new type is created
type type_alias = number | string | boolean;
  
// Variable is declared of the new type created
let variable: type_alias;
variable = 1; 
console.log(variable);
variable = "geeksforgeeks";
console.log(variable);
variable = true;
console.log(variable);


Javascript
// A new type is created
type type_alias = number | string | boolean;
  
// Variable is declared of the new type created
let variable: type_alias;
variable = function () {};


Javascript
// A new type is created 
type anotherType = number | string;
let variable: string;
function displayId(id: anotherType) {
  if (typeof id === typeof variable) {
    return "my id is : " + id;
  }
  return "my id is : " + `${id.toString()}`;
}
  
// Argument of type string is passed into the functiom
console.log(displayId("AF565"));
  
// Argument of type number is passed into the function
console.log(displayId(565));


Javascript
// A new type is created
type otherType = "yes" | "no";
let variable: otherType;
variable = "yes"; // no error
console.log(variable);
variable = "neither"; // error
console.log(variable);


输出:

1
geeksforgeeks
true

这里我们尝试给一个类型为函数的变量,typescript 编译器报错。

Javascript

// A new type is created
type type_alias = number | string | boolean;
  
// Variable is declared of the new type created
let variable: type_alias;
variable = function () {};

输出:

error TS2322: Type '() => void' is not assignable to type 'type_alias'.
  Type '() => void' is not assignable to type 'true'.

    variable = function () {};

示例 2:在函数中实现类型别名。

在本例中,我们将尝试在函数中实现类型别名。我们创建了一个名为 anotherType 的类型别名,它是数字和字符串类型的联合。函数DisplayId 可以采用 number 或字符串类型的参数。如果给出任何其他类型,则会引发错误。

Javascript

// A new type is created 
type anotherType = number | string;
let variable: string;
function displayId(id: anotherType) {
  if (typeof id === typeof variable) {
    return "my id is : " + id;
  }
  return "my id is : " + `${id.toString()}`;
}
  
// Argument of type string is passed into the functiom
console.log(displayId("AF565"));
  
// Argument of type number is passed into the function
console.log(displayId(565));

输出:

my id is : AF565
my id is : 565

示例 3:字符串字面量作为类型别名。

我们可以使用字符串来代替在 union 中指定类型。创建了一个新类型,其类型别名为“yes”|“no”。只有“yes”或“no”字符串可以作为其他类型声明的变量的值。当输入其他值时,打字稿编译器会引发错误。

Javascript

// A new type is created
type otherType = "yes" | "no";
let variable: otherType;
variable = "yes"; // no error
console.log(variable);
variable = "neither"; // error
console.log(variable);

输出:

打字稿编译器引发错误:

error TS2322: Type '"neither"' is not assignable to type 'anotherType'.

    variable = "neither"; // error
    ~~~~~~~~

执行 JavaScript 文件后:

yes
neither