我正在用打字稿构建一个 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)