2016-03-21 3 views
3

хотели бы получить помощь в написании d.ts файл https://github.com/paldepind/union-typeМашинопись определения объединения типа JS

С типом накидного ниже,

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

Я хотел бы видеть ошибку компиляции в случае Maybe.Nothing() является опечатался в Maybe.None()

Я попытался захватить ключи от объекта буквального, но компилятор до сих пор не признает Nothing и Just в результате типа Maybe.

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 

ответ

0

Если вы ищете Maybe реализации здесь есть один я написал однажды

/** 
* 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); 
     } 
    } 
} 

Тем не менее, я считаю, это довольно бесполезно, гораздо проще быть просто в курсе null/undefined и использования valid недвижимость на ваших объектах (более https://medium.com/@basarat/null-vs-undefined-in-typescript-land-dc0c7a5f240a)

Больше

, что все сказанное машинопись собирается получить первый класс допустимость пустых поддержкиhttps://github.com/Microsoft/TypeScript/pull/7140 и вы будете в состоянии сделать number | null | undefined и не будет позволено назначать null ряду т.е. let foo:number = null; // Error foo is not nullable

+0

Цените @basarat за быстрый ответ. Но я цитировал тип Maybe как пример, не ищу реализацию. Я хочу обратиться за помощью к написанию определения типа для https://github.com/paldepind/union-type, так что я могу заставить tsc-компилятор выделить ошибки опечатки для меня. В настоящее время я должен использовать 'any', что не хуже, чем печатать. Не могли бы вы мне помочь? – gnois

Смежные вопросы