为了账号安全,请及时绑定邮箱和手机立即绑定

Typescript 语法说明

Typescript 语法说明

侃侃尔雅 2023-06-09 10:39:16
我正在阅读用 Typescript 编写的代码。我不确定我是否理解正确:export class MyClass<B> {  value: B;  constructor(value: B) {    this.value = value;  }  isMyClass(): this is MyClass<B> {    return true;  }}代表什么<B>?它代表什么,类型?如果是这样,它是什么类型?this is MyClass<B>里面有什么isMyClass(): this is MyClass<B>?它被评估为真还是假?为什么不把它放在函数本身里面呢,像这样:  isMyClass() {    if (this is MyClass) {      return true;    }    else {      return false;    }      }我无法找到这些问题的答案。
查看完整描述

1 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

代表什么<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 类型信息。


查看完整回答
反对 回复 2023-06-09
  • 1 回答
  • 0 关注
  • 65 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信