我在TypeScript的ES5定义中发现了这种类型,但是由于简单的描述有点模糊,所以想知道它的作用。
/**
* Removes the 'this' parameter from a function type.
*/
type OmitThisParameter<T> = unknown extends ThisParameterType<T> ? T : T extends (...args: infer A) => infer R ? (...args: A) => R : T;
这个描述意味着this
是一种类型,但当你查看代码时,它的具体含义并不清晰。
我已经在TypeScript的Microsoft文档中搜索过了,但似乎没有涉及到如何使用或为什么要使用this
。
以下是我看到过使用它的源代码示例。
export class Example {
funcRef: OmitThisParameter<()=> void>;
func() { }
constructor() { this.funcRef = this.func.bind(this); }
}
在这里我看不出任何静态类型的优势。使用funcRef
似乎没有限制。这可能是因为这样做可以防止funcRef
作为构造函数使用?
如果我进行以下更改,源代码将无问题编译。
export class Example {
funcRef: () => void;
func() { }
constructor() { this.funcRef = this.func.bind(this); }
}
这种类型与箭头函数是相同的,但我们不为箭头函数声明类型。
因此,我正在寻找一个解释这种类型优势并说明为什么我们应该使用这种类型的答案,因为我很少看到它被使用。
你能给出一个源代码示例,让TypeScript引发类型警告吗?
Example ["func"]
也非常聪明。现在我明白为什么这个例子有点毫无意义,以及为什么我之前无法理解它了。 - Reactgular