在 TypeScript 中, 如何动态地添加属性给一个对象?

export function login_post(req: express.Request, res: express.Response, nex…
关注者
43
被浏览
270,422

9 个回答

谢邀.

首先建议在编译器选项中开启 `noEmitOnError` 一项. 然后针对这个问题, 其实需要的不是 "动态" 添加, 而是扩展已有的类型声明.

这一定程度上依赖于原有声明的写法, 不过 TypeScript 最近提供了个相关特性可以让扩展声明更方便. 虽然可能跟本题目没有关系.

在截图中其实可以看到, `Session` 类型应该是在 `Express` 命名空间下. 光标移到 `session` 上, F12 (go to definition), 可以看到其声明的地方. 如果平时声明文件是项目内自行维护, 直接修改即可. 如果不希望改动原有声明文件, 可以新加一个文件, 比如 session.d.ts, 里面写上:

declare namespace Express {
    interface Session {
        user: any; // 不要用 any.

以上写法假设了原 `Session` 接口定义在 `Express` 命名空间中. 时间关系我就暂时不去看实际写法了, 如果有问题可以把声明的结构告知一下.

我的作法是将这个对象强转为一个 Interface,这样会清晰一点。

class Session {
interface IUser {
    name: string;
    password: string;
    url: string;
var session = new Session();