这种模式要求我定义两种我想重构/合并的类型:
...
.then((result1: any) => {
let promises = {
one: $q.when(val1),
two: $q.when(val2)
};
return $q.all(promises);
})
.then((resolvedPromises: any) => {
// use
resolvedPromises.one...
resolvedPromises.two
});
我想定义promises
和resolvedPromises
的类型,但由于它们是类型相关的,我想定义一个类型(可能是通用的),而不是定义两个具有相似定义的类型。
所以而不是:
public interface ResultingType {
[id: string]: any,
one: Something1,
two: Something1
}
public interface PromisingType {
[id: string]: ng.IPromise<any>,
one: ng.IPromise<Something1>,
two: ng.IPromise<Something2>
}
问题在于,从通常的泛型类型角度来看,我们提供了最内部类型注入,但在我的情况下,我需要以某种方式定义外部键入ng.IPromise<>
或实际上没有。
我也不想最终得到一种允许两种类型的类型:
public interface ConsolidatedType {
[id: string]: any | ng.IPromise<any>,
one: Something1 | ng.IPromise<Something1>,
two: Something2 | ng.IPromise<Something2>
}
这将允许在无效位置混合和匹配。所以这是不行的。有没有其他方法可以实现单个类型而没有代码重复,只将类型包装到promises中?
答案 0 :(得分:1)
怎么样:
interface BaseType<T, S> {
[id: string]: T;
one: S;
two: S;
}
然后:
...
.then((result1: any) => {
let promises = {
one: $q.when(val1),
two: $q.when(val2)
} as BaseType<ng.IPromise<any>, ng.IPromise<Something1>>;
return $q.all(promises);
})
.then((resolvedPromises: BaseType<any, Something1>) => {
// use
resolvedPromises.one...
resolvedPromises.two
});
您还可以创建&#34;快捷方式&#34;:
interface PromiseType extends BaseType<ng.IPromise<any>, ng.IPromise<Something1>> {}
interface ValueType extends BaseType<any, Something1> {}
然后:
...
.then((result1: any) => {
let promises = {
one: $q.when(val1),
two: $q.when(val2)
} as PromiseType;
return $q.all(promises);
})
.then((resolvedPromises: ValueType) => {
// use
resolvedPromises.one...
resolvedPromises.two
});