Search code examples
javascriptreactjstypescriptgeneric-programming

Typescript Can't implement generic function interface


I'm trying to implement a generic function interface and I cannot make it work.

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');
};

Here is a screenshot from tokenMapper.ts saying IToken import is unused but I should have a use for it:

tokenMapper.ts

Edit : Using Typescript 3.0.3


Solution

  • I believe you can accomplish your typing with a generic interface 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');
    };
    

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