当prop类型为Number,String或Boolean时,它将给出相应的类型promty:
https://gitlab.com/crunchy234/android-gradle-dependencies-export
但是当prop类型为Object时,它将是任意类型:
当我将Object转换为返回您想要的接口的函数时,它也会获得相应的Corrent类型:
我在options.d.ts中找到了道具类型声明
export type Prop<T> = { (): T } | { new (...args: any[]) => T & object }
但是我不知道这是什么意思,它如何推断类型?
答案 0 :(得分:1)
这就是所谓的构造函数类型。
更严格地说,此属性可以通过以下不同方式出现:
(): T
返回指定的类型T
; new (...args): T & object
,使用指定类型T
的其他属性创建指定类型object
的对象。 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
}
请注意,这是最通用的构造方法,因此可以有可能返回 any 可能的值。因此,编译器准确地告诉您-“您有一个其构造函数返回any
的类”。
似乎您可以只使用User
作为属性类型。我想因为它也是一个类,所以它将具有new (...args) => User
的签名,因此它将准确地推断出您需要的类型。
upd:错过了问题中的接口定义。好吧,如果没有理由改为将其设为类,则正确的键入(和用法)似乎是该函数:() => User
,而不是Object
。