我有一种方法,希望能够传递一种类型的参数(它将是工厂函数)并返回另一种类型的参数(实例化的类)。我正在努力使返回类型正确,因此我想退后一步,并使用简单的number
和string
变量来完成操作-但仍然无法以通用方式使它工作
如果我有一个convert
函数,该函数会将数字转换为字符串并将字符串转换为数字:
let convert: Convert = function ( value ) {
if ( typeof value === 'number' ) {
return value.toString();
}
return parseInt( value.toString(), 10 );
}
使用此界面可以正常工作:
interface Convert {
( string ): number;
( number ): string;
}
let a = convert( '1' ); // a is a `number`
let b = convert( 2 ); // b is a `string`
如果我不使用该界面,TypeScript会自动将返回视为string | number
,据我所知。
我尝试使用:
interface Convert {
<Tout, Tin>(
value: Tin
): Tout;
}
认为这可能意味着Tout
将由基于Tin
的返回值定义,但没有骰子。老实说,我不太了解何时应该传入泛型以及何时通过TypeScript推断泛型。
我在这里树错了树吗-我应该只使用泛型告诉TypeScript我期望它返回什么,而不是期望它可以自动完成?