我有以下定义(我使用ImmutableJS):
declare module Immutable {
export module Record {
type IRecord<T> = T & TypedMap<T>;
interface TypedMap<T> extends Map<string, any> {
set(key: string, value: any): IRecord<T>
}
interface Factory<T> {
new (): IRecord<T>;
new (values: T): IRecord<T>;
(): IRecord<T>;
(values: T): IRecord<T>;
}
}
export interface Record<T> {
(defaultValues: T, name?: string): Record.Factory<T>;
}
export function Record<T>(
defaultValues: T, name?: string
): Record.Factory<T>;
}
declare interface IState extends Immutable.Map<string, any> {
router: Immutable.Map<string, any>;
sessions: Immutable.Map<gameId, Immutable.List<Immutable.Record<ISession>>>;
games: Immutable.Map<gameId, Immutable.Record<IGame>>
}
当我以这种方式使用它时:
const state: IState = <IState>Map<string, any>({
router: Map<string, any>(),
sessions: Map<gameId, List<Record<ISession>>>({
1: List([10])
}),
games: Map<gameId, Record<IGame>>()
});
我没有收到任何错误。我希望它能够抱怨这一部分:
sessions: Map<gameId, List<Record<ISession>>>({
1: List([10])
})
我将号码10
添加到List<Record<ISession>>
为什么我没有看到任何错误?
答案 0 :(得分:0)
这不是一个真正的答案,但它不适合评论框。
@Sohnee,关于你上面评论中的问题,@ poliani正在从Immutable.js扩展类型,所以这就是Map(和List,和Record)的来源。
我想知道TS 1.7的“这个”功能是否与答案相关:Typescript PR for polymorphic 'this' type。我认为Immutable.js的人们仍在思考如何处理Record中的类型安全和继承。见证
虽然他们正在思考这个问题,但我正在思考记录是否值得他们提出的类型安全挑战。