考虑我已导出界面
export interface IMyAngularService{
}
Run Code Online (Sandbox Code Playgroud)
当我们注册服务或工厂时,我们通常使用函数名作为注册服务的名称或简单的可派生字符串(例如'ISomeService' - >'SomeService');
稍后我可以决定重命名界面,并希望依赖描述自动更改:
class MyController{
static $inject = [
dependency(nameof<ISomeService1>),
dependency(nameof<ISomeService2>)
];
constructor(...dependencies){
}
}
Run Code Online (Sandbox Code Playgroud)
其中dependency
函数通常从接口名称获取服务名称.因此,无论何时ISomeService1
更改名称,结果JavaScript都包含更改的字符串.
cur*_*rpa 19
这是不可能的.TypeScript不会为接口生成任何代码,也就像nameof
运算符一样.
小智 7
如果您将所有接口映射到它们的名称,则可以,如下所示。
interface Blueberry { strawberry: boolean; }
interface Car { vehicle: number; }
interface Interfaces {
Blueberry: Blueberry;
Car: Car;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样获取接口的名称:
export type RemoveNeverProps<T> = {
[K in Exclude<
keyof T, ({
[P in keyof T]: T[P] extends Function ? P : never
})[keyof T]>
]: T[K]
};
export type IncludeProp<T extends object, E> =
RemoveNeverProps<{ [K in keyof T]: T[K] extends E ? T[K] : never }>;
type Nameof<I extends Interfaces[keyof Interfaces]> =
keyof IncludeProp<Interfaces, I>;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4511 次 |
最近记录: |