老师您好,config/index.ts ...EnvConfig[env]报错

来源:1-1 课前须知,这里有你需要了解得一切

慕尼黑8466541

2021-07-07

interface Mode {
    baseApi: String,
    mockApi: String
}

interface Person {
    dev: Mode,
    prod: Mode
}

const env: string = import.meta.env.MODE || 'prod'

const EnvConfig: Person = {
    dev: {
        baseApi: '/',
        mockApi: '/'
    },
    prod: {
        baseApi: '/',
        mockApi: '/'
    }
}

export default {
    env,
    mock: false,
    namespace: 'cloth',
    ...EnvConfig[env]
}

报错内容如下:

元素隐式具有 "any" 类型,因为类型为 "string" 的表达式不能用于索引类型 "Person"。
  在类型 "Person" 上找不到具有类型为 "string" 的参数的索引签名。ts(7053)

麻烦老师帮我看一下是哪里问题

写回答

2回答

河畔一角

2021-07-12

因为import.meta.env.MODE返回的不一定是dev/prod,还可能返回其他类型,如果返回一个其他类型,通过EnvConfig是匹配不到的。

所以,需要扩展一下Person对象

interface Person {
    dev: Mode,
    prod: Mode,
    [key:string]: Mode | undefined
}

让它接受任意类型的字符串

0
0

Lemon甜橙君

2021-07-08

你定义的这个interface Mode,baseApi和mockApi的类型,应该都是小写的string

0
1
慕尼黑8466541
兄弟你好,小写也不行,报错一样
2021-07-08
共1条回复

Vue3+ElementPlus+Koa2 全栈开发后台系统

从前端晋级到全栈,让你的未来发展有更多可能

1069 学习 · 580 问题

查看课程