使用TypeScript的Vue道具类型

时间:2018-07-02 04:45:44

标签: typescript vue.js

当prop类型为Number,String或Boolean时,它将给出相应的类型promty:

https://gitlab.com/crunchy234/android-gradle-dependencies-export

但是当prop类型为Object时,它将是任意类型:

enter image description here

当我将Object转换为返回您想要的接口的函数时,它也会获得相应的Corrent类型:

enter image description here

我在options.d.ts中找到了道具类型声明

export type Prop<T> = { (): T } | { new (...args: any[]) => T & object }

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

1 个答案:

答案 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