Ich bin ein erfahrener JavaScript-Entwickler, der vor kurzem C# als meine erste statisch getippte Sprache gelernt hat. Mein nächstes Projekt verwendet Typoskript, also habe ich es aufgepeppt.Typ 'T' ist nicht dem Typ 'T' zuweisbar
Dies ist mein Code:
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;
}
}
Edit: Ich auch diese Klasse, die 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));
}
}
Hier ist der Fehler von tsc
Ich erhalte implementiert:
src/lazy_monad.ts (25,10): Fehler TS2322: Typ 'this' ist nicht zuweisbar , um 'LazyMonad' einzugeben. Type 'LazyMonad' ist nicht zu Typ 'LazyMonad' zuweisbar. Typ 'T' kann nicht dem Typ 'T' zugewiesen werden.
Meine Implementierung könnte hier falsch sein, aber ich glaube, das würde in C# funktionieren. Rat?
Meinten Sie, 'set' generisch zu machen? Ich denke, dass Sie möchten, dass es das "T" aus der Klasse und nicht das "T" von der Methode für etwas, das ist ein get/set –