我们正在将我们的JS应用程序转换为TypeScript。当我们从服务器获取数据时,有时我们将其保留为普通的JSON对象,有时我们将其转换为Backbone模型。我们想在各地区分这些类型。理想情况下,我们会将这两种类型称为Backend.Foo
和Backbone.Foo
。当我们试图用一个替代另一个理想时,我们会得到一个错误,上面写着“Type'Backend.Foo'不能分配给'Backbone.Foo'。”和不一个错误,说“类型'Foo'不能分配给'Foo'类型。存在两个具有此名称的不同类型,但它们是无关的。”
目前我们的设置如下:
// models/foo.ts
export default Foo extends Backbone.Model { ... }
// types/backend/foo.ts
export default interface Foo { ... }
// types/backend.ts
import Foo from "types/backend/foo"
export { Foo }
这允许我们执行以下操作:
import * as Backend from "types/backend"
import Foo from "models/foo"
let backboneFoo: Foo
let backendFoo: Backend.Foo
但如果我们补充:
backendFoo = backboneFoo
backboneFoo = backendFoo
我们得到错误:“类型'Foo'不能分配给'Foo'类型。存在两个具有此名称的不同类型,但它们是不相关的。”
我们还可以在models.ts
中重新导出Backbone模型,以便我们可以执行import * as Backbone from "models"
,但这不会解决错误消息。
我们可以使用TypeScript命名空间获得所需的行为吗?