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

J. *_*eer 8 typescript vue.js

我正在用打字稿构建一个 vuejs 应用程序。我想最大限度地利用可用的类型。

大多数情况下,类型和类型推断都可以正常工作。

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

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

function myFunction(someComponent: MyComponent) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会导致错误:

'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;
    ...
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点而不必创建一个实例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;
Run Code Online (Sandbox Code Playgroud)

如果没有虚拟功能,是否可以进一步降低它?

编辑2:

这是可能的InstanceType<...>

这有效:

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

export type MyComponentInstance = InstanceType<typeof MyComponent>

let test : MyComponentInstance;
let str = test.test;
Run Code Online (Sandbox Code Playgroud)

J. *_*eer 11

在@BillNaylor 的帮助下,他为我指明了正确的方向,我找到了解决方案。

我需要使用 InstanceType<...>

例子:

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

export type MyComponentInstance = InstanceType<typeof MyComponent>

let test : MyComponentInstance;
let str = test.test;
Run Code Online (Sandbox Code Playgroud)

  • 非常好的答案,先生。从那时起我就有了类似问题的通用解决方案。 (2认同)