带有 TypeScript 的 Vue 道具类型

jkc*_*hao 6 typescript vue.js

当 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)

但我不知道它是什么意思,它如何推断类型?

Cer*_*rus 4

这就是所谓的构造函数类型

更严格地说,该属性可以以以下不同的方式出现:

  • (): T作为返回指定类型的通用函数T
  • 作为泛型构造函数,使用type 的附加属性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