打字稿无法实现通用函数接口
Typescript Can't implement generic function interface
我正在尝试实现通用函数接口,但我无法使其工作。
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 导入未使用,但我应该可以使用它:
编辑:使用 Typescript 3.0.3
我相信您可以使用通用界面完成打字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
所以这是我为了让它工作所做的更改
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');
};
我正在尝试实现通用函数接口,但我无法使其工作。
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 导入未使用,但我应该可以使用它:
编辑:使用 Typescript 3.0.3
我相信您可以使用通用界面完成打字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
所以这是我为了让它工作所做的更改
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');
};