首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue 2组合API +类型记录- TS2571:对象类型为“未知”,使用提供/注入

Vue 2组合API +类型记录- TS2571:对象类型为“未知”,使用提供/注入
EN

Stack Overflow用户
提问于 2021-04-23 14:41:14
回答 1查看 1.5K关注 0票数 1

我使用Vue开发了简单的Laravel应用程序。当我访问道具时,我无法摆脱打字错误TS2571: Object is of type 'unknown'.

我有两个Vue单文件组件:

父母:

代码语言:javascript
复制
<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>

儿童:

代码语言:javascript
复制
<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文件中有:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
{
    "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不想编译代码。拜托,你能帮我弄清楚吗?我不是有经验的类型记录开发人员。我曾经使用Vue Options。

EN

回答 1

Stack Overflow用户

发布于 2021-04-23 21:14:52

我看到了一个不同的错误(w/TypeScript 4.1.5):

输入'AppConfig‘是不可分配的,不能输入'AppConfig’。ts(2322)

...which指向这一行:

const appConfig: AppConfig = inject(appConfigKey);^

您不需要键入appConfig,因为它已经可以被推断为AppConfig | undefined

代码语言:javascript
复制
const appConfig = inject(appConfigKey);

由于appConfig可能是undefined,所以使用可选链引用其属性:

代码语言:javascript
复制
console.log(appConfig?.shortName);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67232002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档