Определите тип JSDoc с помощью переменной [удобно для WebStorm]

В следующем коде я хотел бы определить форму типа ApplicationSettings с помощью переменной testSettings, чтобы внутри IDE функции useSettings было известно, какие свойства доступны для объекта settings:

/** @typedef ApplicationSettings */
var testSettings = {
    apiService: {},
    configuration: {}
};

/**
 * @param {ApplicationSettings} settings
 */
function useSettings(settings) {
    console.log(settings.apiService); // apiService is not recognized here
    console.log(settings.configuration); // same for configuration
}

К сожалению, кажется, что @typedef в этом случае не является допустимой аннотацией. Можно ли сообщить WebStorm, как должен выглядеть тип ApplicationSettings, без явного указания всех его свойств в JSDoc?


person Andrew Khmylov    schedule 31.03.2014    source источник


Ответы (1)


Зачем вам здесь @typedef? работает следующий синтаксис:

var testSettings = {
    apiService: {},
    configuration: {}
};

/**
 * @param {testSettings} settings
 */
function useSettings(settings) {
    console.log(settings.apiService); 
    console.log(settings.configuration);
person lena    schedule 31.03.2014
comment
Спасибо, это работает, но что, если объект настроек и функция находятся в разных модулях? Я действительно не хочу, чтобы аннотация функции зависела от точного имени переменной testSettings. Его можно легко переименовать завтра, аннотации типов кажутся более постоянными с точки зрения разработчика. - person Andrew Khmylov; 01.04.2014