猿问

Typescript 语法说明

我正在阅读用 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;

    }    

  }

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


侃侃尔雅
浏览 91回答 1
1回答

繁星点点滴滴

代表什么<B>?它代表什么,类型?如果是这样,它是什么类型?这是一个类型参数,也称为泛型。在 C# 和 Java 等语言中,用于创建可重用组件的工具箱中的主要工具之一是泛型,也就是说,能够创建一个可以处理多种类型而不是单一类型的组件。这允许用户使用这些组件并使用他们自己的类型。每当调用一个函数或创建一个实例时,如果该函数或类是通用的,您可以将类型参数“传递”给它,类似于将参数传递给函数或构造函数的方式。(不同之处在于类型参数是一个type,在发出的 JS 中不存在——它只是用来帮助 TS 类型检查)。如果是这样,它是什么类型?它是调用构造函数参数的任何类型。const m = new MyClass(3);将导致constructor(value: B)其中valueis 3,告诉 TypeScript 结果实例是 a MyClass<number>- 换句话说,它的value属性包含 a number, a 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 类型信息。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答