Машинопись не может реализовать функцию универсального интерфейса

голоса
0

Я пытаюсь реализовать функцию универсального интерфейса, и я не могу заставить его работать.

IToken.ts

export interface IToken {
  token: string;
  expires: number;
}

ITokenMapper.ts

export interface ITokenMapper {
  <T>(apiResult: any): T;
}

tokenMapper.ts

import {ITokenMapper} from ./interfaces/ITokenMapper;
import {IToken} from ./interfaces/IToken;

export const tokenMapper: ITokenMapper = function <IToken>(apiResult: any): IToken {
  if(apiResult.token && apiResult.expires) {
    return {token: apiResult.token as string, expires: apiResult.expires as number}
  }
  throw new Error('Unable to parse token');
};

Вот скриншот из tokenMapper.tsговоря IToken импорта используется , но я должен быть использование для этого:

tokenMapper.ts

Edit: Использование машинописи 3.0.3

Задан 19/09/2018 в 13:20
источник пользователем
На других языках...                            


2 ответов

голоса
4

Я считаю, что вы можете сделать ввод текста с общим интерфейсом ITokenMapper<T>

interface IToken {
    token: string;
    expires: number;
}

interface ITokenMapper<T> {
    (apiResult: T): T;
}

const tokenMapper: ITokenMapper<IToken> = function (apiResult) {
    if(apiResult.token && apiResult.expires) {
      return { token: apiResult.token as string, expires: apiResult.expires as number};
    }

    throw new Error('Unable to parse token');
};

От: https://www.typescriptlang.org/docs/handbook/generics.html#generic-types

Ответил 19/09/2018 d 13:38
источник пользователем

голоса
1

Так вот что я изменил, чтобы сделать его работу

ITokenMapper.ts -> IMapper.ts переименован и обновлен

export type IMapper<T> = (apiResult: any) => T;

tokenMapper.ts -> abpTokenMapper.ts переименован и обновлен

import { IMapper } from "../../utils/IMapper";
import { IToken } from "../interfaces/IToken";

export const abpTokenMapper: IMapper<IToken> = (apiResult: any) => {
  if (apiResult.accessToken && apiResult.expireInSeconds) {
    return { token: apiResult.accessToken as string, expires: apiResult.expireInSeconds as number }
  }
  throw new Error('Unable to parse token');
};

Ответил 20/09/2018 d 07:43
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more