有没有办法在vuejs中获取组件的类型?

时间:2019-10-21 14:50:58

标签: typescript vue.js

我正在用打字稿构建vuejs应用程序。我想最大限度地利用可用的键入。

大多数时候,键入和类型推断都可以正常工作。

在一些代码中,我想传递对特定组件类型的引用。即

const MyComponent = Vue.extend({...});

function myFunction(someComponent: MyComponent) {
    ...
}

不幸的是,这导致错误:

'MyComponent' refers to a value, but is being used as a type here.

起作用的事情是这样的:我创建一个实例,然后在函数声明中使用该实例的typeof:

const MyComponent = Vue.extend({...});

let myComponentInstance = new MyComponent();
function myFunction(someComponent: typeof myComponentInstance ) {
    ...
    someComponent.someProperty;
    ...
}

是否有一种无需创建MyComponent实例的方法?在我看来,由于存在知识,应该有可能。

编辑:

在@ Bill-Naylor的建议下,我明白了这一点。

const MyComponent =  Vue.extend({
    data() {
        return {
            test: "test"
        }
    }
});

let dummy = () => new MyComponent();
export type MyComponentInstance = ReturnType<typeof dummy>

let test : MyComponentInstance;
let str = test.test;

如果没有虚拟功能,是否有可能将其降低更多?

Edit2:

InstanceType<...>是可能的。

这有效:

const MyComponent =  Vue.extend({
    data() {
        return {
            test: "test"
        }
    }
});

export type MyComponentInstance = InstanceType<typeof MyComponent>

let test : MyComponentInstance;
let str = test.test;

1 个答案:

答案 0 :(得分:1)

在@BillNaylor的帮助下,我为我指明了正确的方向。

我需要使用InstanceType<...>

示例:

const MyComponent =  Vue.extend({
    data() {
        return {
            test: "test"
        }
    }
});

export type MyComponentInstance = InstanceType<typeof MyComponent>

let test : MyComponentInstance;
let str = test.test;