打字稿:箭头函数的对象,返回一个对象

时间:2020-10-11 21:06:32

标签: typescript express-session

给出以下内容,

...
const NODE_ENV = 'development';
const sessionConfig = {
 'development': ():session.SessionOptions => ({
   'store': storeConfig.development(),
   'secret': 'REDACTED',
   'resave': false,
   'saveUninitialized': true,
   'cookie': {'secure': false},
   'genid': () => uuidv4()
  }),
  'testing': ():session.SessionOptions => ({
    'store': storeConfig.testing(),
    'secret': 'REDACTED',
    'resave': false,
    'saveUninitialized': true,
    'cookie': {'secure': false},
    'genid': () => uuidv4()
  }),
  'production': ():session.SessionOptions => ({
    'store': storeConfig.production(),
    'secret': process.env.SESSION_SECRET || 'REDACTED',
    'resave': false,
    'saveUninitialized': true,
    'cookie': {
      'secure': process.env.SESSION_COOKIE_SECURE === 'true' || false
    },
    'genid': () => uuidv4()
  })
}
{NODE_ENV} = process.env,
sessionEnvConfig = sessionConfig[NODE_ENV],
sessionEnvObject:session.SessionOptions = sessionEnvConfig(),
sessionObject = session(sessionEnvObject);

export default sessionObject;

每当尝试使用tsc进行编译时,都会出现此错误:

error TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ development: () => SessionOptions; testing: () => SessionOptions; production: () => SessionOptions; }'.
  No index signature with a parameter of type 'string' was found on type '{ development: () => SessionOptions; testing: () => SessionOptions; production: () => SessionOptions; }'.

我似乎无法解决这个TS错误吗?有人可以在这里解释此错误是什么,或者至少是我在做什么错?我想90%地肯定这是关于如何(未)定义对象类型的错误,但是我不知道该如何处理。 我也有这个environment.d.ts文件:

declare global {
  namespace NodeJS {
    interface ProcessEnv {
      [key: string]: string | undefined;
      NODE_ENV?: 'development' | 'production' | 'testing' ;
    }
  }
}

1 个答案:

答案 0 :(得分:1)

该错误是因为Typescript正在推断string的{​​{1}},而不是您的常量值之一。

因此,Typescript不确定NODE_ENV(是NODE_ENV)是否与对象中的任何键相对应。

您可以尝试以下方法:

string

这样,您可以将const NODE_ENV = 'development' as const; 的可能值缩小到NODE_ENV

另外,尝试这样声明您的development

process.env