fro*_*.io 34 typescript angular
在Java中,您可以使用类"Class"将类作为参数提供给方法.我没有在打字稿文档中找到任何类似的东西 - 是否可以将类交给方法?如果是这样,"any"类型是否包含此类类型?
背景:我遇到了Webstorm的问题,告诉我无法将一个类移交给@ViewChild(...)Angular 2.然而,Typescript编译器并没有抱怨.签名@ViewChild()似乎是"Type<any> | Function | string",所以我想知道是否有任何包括类.
zzr*_*zrv 41
最简单的解决方案是let variable: typeof Class.
这里有一个例子:
class A {
public static attribute = "ABC";
}
function f(Param: typeof A) {
Param.attribute;
new Param();
}
f(A);
Run Code Online (Sandbox Code Playgroud)
Nit*_*mer 36
您在打字稿中所要求的等价物是类型{ new(): Class },例如:
class A {}
function create(ctor: { new(): A }): A {
return new ctor();
}
let a = create(A); // a is instanceof A
Run Code Online (Sandbox Code Playgroud)
(游乐场代码)
Bug*_*ggy 13
Angular内部声明 Type为:
export interface Type<T> extends Function { new (...args: any[]): T; }
Run Code Online (Sandbox Code Playgroud)
使用TypeScript3,应该可以为参数添加类型,而不会导致函数重载:
export interface TypeWithArgs<T, A extends any[]> extends Function { new(...args: A): T; }
Run Code Online (Sandbox Code Playgroud)
例:
class A {}
function create(ctor: Type<A>): A {
return new ctor();
}
let a = create(A);
Run Code Online (Sandbox Code Playgroud)
Dav*_*ret 10
是否可以将类交给方法?如果是这样,"any"类型是否包含此类类型?
是的,是的.any包括每种类型.
以下是仅包含类的类型示例:
type Class = { new(...args: any[]): any; };
Run Code Online (Sandbox Code Playgroud)
然后使用它:
function myFunction(myClassParam: Class) {
}
class MyClass {}
myFunction(MyClass); // ok
myFunction({}); // error
Run Code Online (Sandbox Code Playgroud)
你不应该在类中传递错误,Function因为它应该可以正常工作:
var func: Function = MyClass; // ok
Run Code Online (Sandbox Code Playgroud)
以下对我有用:
type ClassRef = new (...args: any[]) => any;
Run Code Online (Sandbox Code Playgroud)
我的用例:
interface InteractionType { [key: string]: ClassRef; }
Run Code Online (Sandbox Code Playgroud)
以下是仅包含类的类型的示例:
declare type Class<T = any> = new (...args: any[]) => T;
Run Code Online (Sandbox Code Playgroud)
Type<T>from@angular/core是 Class 的合适接口。
export interface Type<T> extends Function {
new (...args: any[]): T;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用它来保持对类的引用,而不是此类的实例:
private classRef: Type<MyCustomClass>;
Run Code Online (Sandbox Code Playgroud)
或者
private classRef: Type<any>;
Run Code Online (Sandbox Code Playgroud)
根据您的问题的背景@ViewChild:
@ViewChild允许注入"string selector"/ Component/Directive
签名Type<any> | Function | string
是一个抽象签名,它允许我们注入以上所有内容。
| 归档时间: |
|
| 查看次数: |
20562 次 |
| 最近记录: |