我正在用打字稿构建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;
答案 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;