繁体   English   中英

Typescript 语法说明

[英]A Typescript syntax clarification

我正在阅读用 Typescript 编写的代码。 我不确定我是否理解正确:

export class MyClass<B> {
  value: B;

  constructor(value: B) {
    this.value = value;
  }

  isMyClass(): this is MyClass<B> {
    return true;
  }
}

  1. <B>代表什么? 它代表什么,一个类型? 如果是,它是什么类型?

  2. 什么是this is MyClass<B>isMyClass(): this is MyClass<B> 它被评估为真还是假? 为什么不把它放在函数本身里面,像这样:

  isMyClass() {
    if (this is MyClass) {
      return true;
    }
    else {
      return false;
    }    
  }

我无法找到这些问题的答案。

<B>代表什么? 它代表什么,一个类型? 如果是,它是什么类型?

这是一个类型参数,也称为泛型。 请参阅TS 手册

在像 C# 和 Java 这样的语言中,工具箱中用于创建可重用组件的主要工具之一是泛型,即能够创建一个可以在多种类型上而不是单一类型上工作的组件。 这允许用户使用这些组件并使用他们自己的类型。

每当调用一个函数或创建一个实例时,如果该函数或类是泛型的,您就可以向它“传递”一个类型参数,类似于将参数传递给函数或构造函数的方式。 (不同之处在于 type 参数是一个type ,在发出的 JS 中不存在 - 它只是在那里帮助 TS 类型检查)。

如果是,它是什么类型?

它是调用构造函数参数的任何类型。

const m = new MyClass(3);

会导致

constructor(value: B)

其中value3 ,告诉 TypeScript 结果实例是一个MyClass<number> - 换句话说,它的value属性包含一个number ,一个B

什么是this is MyClass<B>isMyClass(): this is MyClass<B> 它被评估为真还是假? 为什么不把它放在函数本身里面,像这样:

isMyClass(): this is MyClass<B> {

是一个类型守卫 如果该方法返回true ,它会告诉 TypeScript 该实例的类型为MyClass<B>

虽然您可以执行以下操作:

  isMyClass() {
    if (this instanceof MyClass) {
      return true;
    }
    else {
      return false;
    }    
  }

这不会让 TypeScript 理解在调用isMyClass时类型已经变窄了; 它只会返回一个布尔值。 相比之下,使用is既会返回一个布尔值又会提供有关所调用内容的 TypeScript 类型信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM