当 prop 类型是 Number、String 或 Boolean 时,它会给出正确的类型 promty:
但是当 prop 类型是 Object 时,它将是 any 类型:
当我将 Object 转换为返回您想要的接口的函数时,它也会被赋予正确的类型:
我在 options.d.ts 中找到了 prop 类型声明
export type Prop<T> = { (): T } | { new (...args: any[]) => T & object }
Run Code Online (Sandbox Code Playgroud)
但我不知道它是什么意思,它如何推断类型?
这就是所谓的构造函数类型。
更严格地说,该属性可以以以下不同的方式出现:
(): T作为返回指定类型的通用函数T;new (...args): T & object创建指定类型的对象。Tobject该Object类型满足第二个变体,即它是具有某些构造函数属性的类。它有以下定义(来自lib.es5.d.ts):
interface Object {
/** The initial value of Object.prototype.constructor is the standard built-in Object constructor. */
constructor: Function;
// some more properties here
}
Run Code Online (Sandbox Code Playgroud)
请注意,这是最通用的构造函数,因此它可能返回任何可能的值。所以转译器准确地告诉你——“你有一个类,其构造函数返回any”。
似乎您可以仅用作User属性类型。我想,因为它也是一个类,所以它将具有 的签名new (...args) => User,因此它会准确地推断出您需要的类型。
upd:错过了问题中的接口定义。好吧,如果没有理由将其作为一个类,那么正确的键入(和用法)似乎是 function: () => User,而不是Object。
| 归档时间: |
|
| 查看次数: |
9104 次 |
| 最近记录: |