2016-03-21 8 views
3

Möchten Hilfe beim Schreiben d.ts Datei für https://github.com/paldepind/union-typeTyposkript Definition für union-Typ js

Mit dem Union-Typ unten suchen,

let Maybe = Type({ 
    Nothing: [] 
    , Just: [Number] 
}) 

Ich würde gerne Compiler-Fehler in Fall sehen Maybe.Nothing() ist vertippt als Maybe.None()

ich die Schlüssel aus dem Objektliteral, aber der Compiler noch Nothing und Just in der resultierenden Art nicht zu erfassen versuchte Maybe zu erkennen.

interface Obj { 
    prototype: any 
    case: (x: {[index: string]: (...args) => any}) => any 
    caseOn: (x: {[index: string]: (...args) => any}) => any 
} 
interface Union<T> { 
    (desc: T): T & Obj 
} 
var Type: Union<{[key: string]: any}> 
export = Type 

Antwort

0

Wenn Sie hier für eine vielleicht Implementierung suchen ist, den ich eine Zeit, sagte

/** 
* A Maybe implementation 
* that is JavaScript first 
* i.e. simple typed abstraction over null/undefined 
*/ 
export class Maybe<T>{ 
    private _value: T; 
    /** Based on value it will be Some or None */ 
    constructor(value: T) { 
     this._value = value; 
    } 
    /** Shorthand for constructor */ 
    static Some<T>(value: T): Maybe<T> { 
     if (value === null || value === undefined) { 
      throw new Error('value for some cannot be null or undefied'); 
     } 
     return new Maybe(value); 
    }; 
    static None<T>(): Maybe<T> { 
     return new Maybe(null); 
    }; 
    get value(): T { 
     return this._value; 
    } 
    get isSome() { 
     return this._value !== null && this._value !== undefined; 
    } 
    get isNone() { 
     return !this.isSome; 
    } 
    map<U>(mapper: (now: T) => U): Maybe<U> { 
     if (this.isSome) { 
      return new Maybe(mapper(this._value)); 
     } 
     else { 
      return new Maybe(null); 
     } 
    } 
} 

Das hat einmal geschrieben, finde ich es ziemlich nutzlos, viel einfacher nur bewusst null/undefined und Nutzen zu sein valid Eigentum auf Ihren Objekten (mehr https://medium.com/@basarat/null-vs-undefined-in-typescript-land-dc0c7a5f240a)

mehr

Das alles gesagt Typoskript zuerst bekommen wird Klasse NULL-Zulässigkeit Unterstützung https://github.com/Microsoft/TypeScript/pull/7140 und Sie werden number | null | undefined der Lage sein, und Sie würden nicht zuweisen null das heißt für Ihre schnelle Antwort let foo:number = null; // Error foo is not nullable

+0

Appreciate @basarat zu einer Reihe erlaubt tun werden. Aber ich zitierte den Maybe-Typ nur als Beispiel, ohne nach einer Implementierung zu suchen. Ich möchte Hilfe beim Schreiben der Typdefinition für https://github.com/paldepind/union-type suchen, so dass ich den TSC-Compiler Tippfehler für mich hervorheben lassen kann. Derzeit muss ich 'any' verwenden, was so gut wie kein Tippen ist. Könntest du mir dabei helfen? – gnois

Verwandte Themen