Bas*_*Bas 3 javascript session node.js express typescript
对于使用该包的项目express-session,我尝试session通过简单地添加用户密钥来改变对象。
req.session.user = 123;
Run Code Online (Sandbox Code Playgroud)
从这个问题的接受答案来看,我知道我可以使用声明合并来扩展SessionData接口,使用我自己的接口。
查看各种开源项目,例如HospitalRun 组件存储库,我注意到它们的文件types中的目录如下所示。tsconfig.jsoninclude
"include": [
"src",
"types"
]
Run Code Online (Sandbox Code Playgroud)
我的整体tsconfig.json看起来像这样,它位于项目的根部。
{
"include": [
"types",
"src",
],
"exclude": [
"node_modules"
],
"compilerOptions": {
"lib": [
"esnext",
"esnext.asynciterable"
],
"baseUrl": ".",
"skipLibCheck": true,
"module": "commonjs",
"esModuleInterop": true,
"target": "es6",
"moduleResolution": "node",
"outDir": "build",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"strictPropertyInitialization": false,
},
}
Run Code Online (Sandbox Code Playgroud)
我尝试做同样的事情,express-session.d.ts在该文件夹的根目录中创建一个名为 ( ~/types/) 的文件,其中包含以下内容:
import session from 'express-session';
declare module 'express-session' {
interface SessionData {
user: any;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我不断收到的错误是这样的。
Property 'user' does not exist on type 'Session & Partial<SessionData>'
Run Code Online (Sandbox Code Playgroud)
然而,当我将这段代码添加到用于改变会话对象的代码上方时,我不再遇到问题。但这似乎不是正确的方法。
另外,当我使用它tsc src/index.ts --build代替时ts-node src/index.ts它也有效。
我在这里做错了什么?如何解决这个问题?我还尝试使用typeRoots相同的文件夹。
Mic*_*ung 10
最新更新(2021 年 5 月 8 日)
使用 运行 typescript 程序时ts-node,即使typeRoots在 tsconfig.json 中指定,也无法识别自定义 .d.ts,并且提示Property 'xdoes not believe on type y` 错误。
根据https://github.com/TypeStrong/ts-node/issues/1132#issuecomment-716642560
贡献者之一ts-node提出了多种解决方法。
这是其中之一:指定file: true标志tsconfig.json以通知ts-node加载files,include以及启动时的exclude选项tsconfig.json
{
"ts-node": {
"files": true
},
"exclude": [...],
"compilerOptions": {
...
}
Run Code Online (Sandbox Code Playgroud)
旧版:(2021 年 5 月 7 日)
不需要使用includein tsconfig.json,路径也不正确。编译器可以在目录及子目录中搜索ts文件
尝试将其删除。并重新启动 TS 服务器。
如果您使用的是VSCode,请尝试++或++并Cmd搜索Shift并查看用户类型错误是否仍然存在PCtrlShiftPRestart TS server
{
"exclude": [
"node_modules"
],
"compilerOptions": {
"lib": [
"esnext",
"esnext.asynciterable"
],
"baseUrl": ".",
"skipLibCheck": true,
"module": "commonjs",
"esModuleInterop": true,
"target": "es6",
"moduleResolution": "node",
"outDir": "build",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"strictPropertyInitialization": false,
},
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1899 次 |
| 最近记录: |