2015-12-18 2 views
1

Предположим, у меня есть такой код:Машинопись массив нуль-сейф

function concat(a: string, b: string):string { 
    return a + b; 
} 

function firstPlusWorld(items: string[]):string { 
    return concat(items[0], ' World'); 
} 

console.log(firstPlusWorld([])); 

В этом случае машинописи не будет спорить о том, что первый аргумент, переданный concat не является строкой.

В функциональной земле есть Maybe типа и head функции имеет типа подписи

head :: List a -> Maybe a 

Есть ли способ сделать машинопись обрабатывать такие случаи?

+0

Ненужные типы - очень хорошая концепция, но пока они интегрированы только на ограниченном количестве языков. JavaScript и его производный проект TypeScript не входят в число них. – Katana314

ответ

1

К сожалению, вам придётся прибегнуть к хорошим/старым if испытаниям. В этом отношении машинописный текст ничего не добавляет к javascript.

Есть tentatives, чтобы принести Монады в Javascript (и машинопись расширения), такие, как этот: https://github.com/fantasyland/fantasy-land (https://github.com/fantasyland для реализации)

Я до сих пор разочарование на этом этапе, и если кто-то находит хорошую библиотеку, я будьте рады перескочить на него и, если нужно, напишите файлы описания файлов для него.

На структурах данных и неизменяемости фронт, вещи немного лучше с Immutable.js, но было бы здорово обернуть структуры в Монадах, чтобы операции над ними могли быть лучше прикованы.

0

На самом деле, string как тип машинопись может также принимать null:

function concat(a: string, b: string):string { 
    return a + b; 
} 

concat(null, null); 

Отвечает ли это на ваш вопрос?