【发布时间】:2016-07-31 17:40:18
【问题描述】:
我是一位经验丰富的 javascript 开发人员,最近学习了 C# 作为我的第一个静态类型语言。我的下一个项目是使用打字稿,所以我一直在复习。
这是我的代码:
interface IMonad<T> {
get(): T;
set<T>(fn: (value: T) => T): IMonad<T>;
}
class LazyMonad<T> implements IMonad<T>
{
private value: T;
private binds;
constructor(value: T)
{
this.value = value;
this.binds = [];
}
get(): T
{
return this.binds
.reduce(function (v: T, fn): T {
return (v === null) ? null : v + fn(v);
}, this.value);
}
set<T>(fn: (value: T) => T): LazyMonad<T>
{
this.binds.push(fn);
return this;
}
}
编辑:我也有这个实现IMonad<T>的类
class IdentityMonad<T> implements IMonad<T>
{
private value: T;
constructor(value: T)
{
this.value = value;
}
get(): T
{
return this.value;
}
set<T>(fn: (value: T) => T): IdentityMonad<T>
{
return new IdentityMonad<T>(fn(this.value));
}
}
这是我从tsc 得到的错误:
src/lazy_monad.ts(25,10):错误 TS2322:类型“this”不可分配 输入“LazyMonad”。类型“LazyMonad”不可分配给 输入“LazyMonad”。 类型“T”不能分配给类型“T”。
我的实现在这里可能是错误的,但我相信这在 C# 中可以工作。建议?
【问题讨论】:
-
您的意思是让
set<T>通用吗?我认为您可能希望它使用类中的T而不是方法中的T来获取/设置
标签: typescript