Typescript: доступ к определенному значению универсального аргумента - PullRequest
0 голосов
/ 17 января 2019

В приведенном ниже коде версия с одним общим аргументом выдает предупреждение с включенным правилом TS noImplicitAny. Обе функции идентичны по логике, я хочу изменить формат аргумента во второй. Это возможно с Typescript?

Более узкий вопрос: как получить доступ к конкретному значению универсального аргумента в новом объявлении типа?

Здесь ссылка на игровую площадку TS. Чтобы увидеть ошибку noImplicitAny должно быть включено в Options.

interface Test {
  loader: any;
  propName: string;
}

// This one has TS warnings (one generic arg)
export function doesntWork<T extends Test>({ loader: Preview, propName }: T) {
  type ReturnType = {
    [K in T['propName']]: {
      loading: boolean
    }
  };

  return <T extends ReturnType>(props: T) => {
    /* 
     * Warning here:
     * "Element implicitly has an 'any' type because type 'ReturnType' has 
     * no index signature."
     */
    if (props[propName] && props[propName].loading) {
      return Preview;
    }

    return false;
  };
}

// This one works without warnings (two separate generic args)
export function works<_, PropName extends string>(Preview: any, propName: PropName) {
  type ReturnType = {
    [K in PropName]: {
      loading: boolean
    }
  };

  return <T extends ReturnType>(props: T) => {
    if (props[propName] && props[propName].loading) {
      return Preview;
    }

    return false;
  };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...