如何从TypeScript中的DefinitelyTyped扩展类型声明

如何从TypeScript中的DefinitelyTyped扩展类型声明,typescript,typescript2.0,Typescript,Typescript2.0,作为一个具体的例子,我试图将Express.Response.locals的类型从any更改为特定于应用程序的AppLocals接口。我正在使用@types/express 我尝试了一些似乎都不起作用的方法: declare namespace express { export interface Response { locals: AppLocals } } 给出错误:Import声明与文件开头的Import*as express中的本地声明“express

作为一个具体的例子,我试图将
Express.Response.locals
的类型从
any
更改为特定于应用程序的
AppLocals
接口。我正在使用
@types/express

我尝试了一些似乎都不起作用的方法:

declare namespace express {
    export interface Response {
        locals: AppLocals
    }
}
给出错误:
Import声明与文件开头的
Import*as express中的本地声明“express”
冲突

如果我尝试复制找到的结构:

那么处理程序中
express.Response
的locals属性仍然是
any
类型

如果我尝试这个,只是为了见鬼:

declare namespace Express {
    interface Response {
        locals: AppLocals
    }
}
TypeScript告诉我,
'Express'已声明,但从未使用过

这对我很有用:

declare module "express" {
  interface Response {
    locals: AppLocals
  }
}
在我的例子中,我唯一想知道的是,我是否可以有多个这样的选项,并让TS合并
局部变量的类型,我还没有做到这一点,所以我只是从
AppLocals
扩展我的其他路由特定局部变量并抛出响应。

这对我来说很有效:

declare module "express" {
  interface Response {
    locals: AppLocals
  }
}

在我的例子中,我唯一想知道的是,如果我可以有多个,并且让TS合并
局部变量
的类型,我还不能这样做,所以我只是从
AppLocals
扩展我的其他路由特定局部变量,并转换响应。

您不能更改现有属性的类型。您可以添加更多属性,但已设置的属性不能更改。您不能更改现有属性的类型。您可以添加更多属性,但已设置的属性不能更改。