我正在用打字稿写我的角度应用程序。 为了防止冗余,我想完成某种类型的通用处理。 这就是我来自的地方:
class BaseProvider {
api_url = 'http://localhost:80/api/FILL_OUT_PATH/:id';
$get($resource){
var provider = $resource(this.api_url, {}, {
update: {
method: 'PUT'
}
});
return provider;
}
}
和
class User extends BaseProvider{
constructor() {
super();
this.api_url = 'http://localhost:80/api/users/:id';
}
}
然后
module Controllers
{
export class BaseController {
message = "Base controller";
entity : any;
entities : any;
constructor($scope)
{
}
}
}
和
module Controllers
{
export class UserController extends BaseController {
name = "UserController";
constructor($scope, User)
{
super($scope);
this.entity = new User();
this.entities = User.query();
$scope.vm = this;
}
}
}
这是我想要使用UserController(P-Code)的地方:
module Controllers
{
export class UserController<T extends BaseProvider> extends BaseController {
name = "UserController";
static $inject = ['$scope', T.typename]; // Inject the types name somehow?
constructor($scope, entity)
{
super($scope);
this.entity = new T();
this.entities = T.query();
$scope.user = this;
}
}
打字稿中是否有设施处理此问题?
答案 0 :(得分:0)
打字稿中是否有设施来处理这个问题?
没有。所有类型信息都从生成的JS中删除,因此您不能将通用参数用作变量。
答案 1 :(得分:0)
由于在运行时没有打字相关信息,因此没有办法使用泛型,但作为一种解决方法,您可以通过构造函数传递类型并使用泛型键入安全性。以下代码编译时没有错误,并显示了如何完成它。
class C1 {
m() { }
}
class C2 extends C1 { }
class C<T extends C1> {
constructor(t: { new (): C1 }) {
var instance = new t();
}
}
new C(C2);