【发布时间】:2021-07-17 18:46:58
【问题描述】:
我使用 Vue 开发了简单的 Laravel 应用程序。
访问道具时我无法摆脱 Typescript 错误TS2571: Object is of type 'unknown'.。
我有两个 Vue 单文件组件:
家长:
<script lang="ts">
import { defineComponent, provide } from '@vue/composition-api';
import { AppConfig, appConfigKey } from './app-config';
import ChildComponent from './ChildComponent.vue';
export default defineComponent({
components: {
ChildComponent
},
setup() {
const appConfig: AppConfig = {
alias: 'foo',
name: 'foo',
shortName: 'foo',
url: 'foo'
};
provide(appConfigKey, appConfig)
}
})
</script>
孩子:
<script lang="ts">
import { defineComponent, inject } from '@vue/composition-api';
import { AppConfig, appConfigKey } from './app-config';
export default defineComponent({
setup() {
const appConfig: AppConfig = inject(appConfigKey);
console.log(appConfig.shortName); // TS error here
}
})
</script>
在我的 app-config 文件中,我有:
import { InjectionKey } from '@vue/composition-api';
export interface AppConfig {
alias: string;
name: string;
shortName: string;
url: string;
}
export const appConfigKey: InjectionKey<AppConfig> = Symbol('appConfig');
我的 tsconfig 文件:
{
"compilerOptions": {
"target": "es2015",
"module": "esnext",
"moduleResolution": "node",
"allowSyntheticDefaultImports": true,
"strict": true,
"strictNullChecks": true,
"strictPropertyInitialization": true,
"noImplicitAny": false,
"noImplicitReturns": false,
"noImplicitThis": false,
"noUnusedLocals": true,
"importHelpers": true,
"skipLibCheck": true,
"allowUnusedLabels": false,
"sourceMap": true,
"esModuleInterop": true,
"allowJs": true,
"baseUrl": ".",
"paths": {
"@/*": ["resources/assets/js/*"]
},
"lib": ["esnext", "dom"]
}
}
ESLint 没有抱怨,但是 webpack 不想编译代码。 拜托,你能帮我弄清楚吗?我不是经验丰富的 Typescript 开发人员。我曾经使用 Vue Options API。
【问题讨论】:
标签: typescript vue.js vue-composition-api