我写了一个小函数,以便更好地处理类型.
function evaluate(variable: any, type: string): any {
switch (type)
{
case 'string': return String(variable);
case 'number': return isNumber(variable) ? Number(variable) : -1;
case 'boolean': {
if (typeof variable === 'boolean')
return variable;
if (typeof variable === 'string')
return (<string>variable).toLowerCase() === 'true';
if (typeof variable === 'number')
return variable !== 0;
return false;
}
default: return null;
}
}
function isNumber(n: any): boolean {
return !isNaN(parseFloat(n)) && isFinite(n);
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用泛型,但不知道如何从泛型参数获取类型.这是可能的?
我正在尝试为函子映射创建一个通用的函数接口,该接口尊重所提供的接口。在下面显示的代码中,我希望value mb的类型Maybe<number>为type ,而不是实际的type Functor<number>。
我确实意识到,一种可能的解决方案是向接口添加重载FMap。我对此解决方案不满意的原因是,我希望将此代码驻留在一个程序包中,从而允许用户创建实现Functor并具有我在使用函数时所描述的行为map。
interface Functor<A> {
map<B>(fn: (a: A) => B): Functor<B>;
}
interface FMap {
<A, B>(fn: (a: A) => B, Fa: Functor<A>): Functor<B>;
}
const map: FMap = (fn, Fa) => (
Fa.map(fn)
);
class Maybe<A> implements Functor<A> {
constructor(private readonly a: A) {}
map<B>(fn: (a: A) => B): Maybe<B> {
return new Maybe<B>(fn(this.a));
}
}
const sqr = (x: number) => x*x;
const ma = …Run Code Online (Sandbox Code Playgroud)