作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这个模式要求我定义两种我想重构/合并的类型:
...
.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>
}
问题是,从通常的泛型类型 Angular 来看,我们提供了要注入(inject)的最内层类型,但在我的例子中,我需要以某种方式定义外部输入 ng.IPromise<>
或者什么都没有。
我也不想以一种允许两种类型的单一类型结束:
public interface ConsolidatedType {
[id: string]: any | ng.IPromise<any>,
one: Something1 | ng.IPromise<Something1>,
two: Something2 | ng.IPromise<Something2>
}
这将允许在无效的地方进行混合和匹配。所以那是不行的。有没有其他方法可以真正拥有单一类型而无需代码重复,只将类型包装到 promise 中?
最佳答案
怎么样:
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
});
您还可以创建“快捷方式”:
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
});
关于angularjs - 一种类型定义,无需联合即可涵盖原始类型和泛型类型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39325834/
这实际上是我问的问题的一部分here ,该问题没有得到答复,最终被标记为重复。 问题:我只需使用 @Autowired 注释即可使用 JavaMailSender。我没有通过任何配置类公开它。 @Co
我是一名优秀的程序员,十分优秀!