考虑我已导出界面
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 次  |  
        
|   最近记录:  |