打字稿:箭头函数的对象 return 一个对象
Typescript: Object of arrow functions that return an Object
鉴于以下情况,
...
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' ;
}
}
}
错误是因为 Typescript 正在为 NODE_ENV
推断 string
,而不是您的常量值之一。
因此,Typescript 不确定 NODE_ENV
(作为 string
)对应于对象中的任何键。
你可以试试这个:
const NODE_ENV = 'development' as const;
这样您就可以将 NODE_ENV
的可能值缩小到 development
。
此外,尝试像这样声明您的 process.env
:
declare const process: {
env: {
NODE_ENV: 'production' | 'development' | 'testing';
}
}
鉴于以下情况,
...
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' ;
}
}
}
错误是因为 Typescript 正在为 NODE_ENV
推断 string
,而不是您的常量值之一。
因此,Typescript 不确定 NODE_ENV
(作为 string
)对应于对象中的任何键。
你可以试试这个:
const NODE_ENV = 'development' as const;
这样您就可以将 NODE_ENV
的可能值缩小到 development
。
此外,尝试像这样声明您的 process.env
:
declare const process: {
env: {
NODE_ENV: 'production' | 'development' | 'testing';
}
}