[英]A Typescript syntax clarification
我正在阅读用 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;
}
}
我无法找到这些问题的答案。
<B>
代表什么? 它代表什么,一个类型? 如果是,它是什么类型?
这是一个类型参数,也称为泛型。 请参阅TS 手册。
在像 C# 和 Java 这样的语言中,工具箱中用于创建可重用组件的主要工具之一是泛型,即能够创建一个可以在多种类型上而不是单一类型上工作的组件。 这允许用户使用这些组件并使用他们自己的类型。
每当调用一个函数或创建一个实例时,如果该函数或类是泛型的,您就可以向它“传递”一个类型参数,类似于将参数传递给函数或构造函数的方式。 (不同之处在于 type 参数是一个type ,在发出的 JS 中不存在 - 它只是在那里帮助 TS 类型检查)。
如果是,它是什么类型?
它是调用构造函数参数的任何类型。
const m = new MyClass(3);
会导致
constructor(value: B)
其中value
是3
,告诉 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.