В зависимости от случая это может быть void
, undefined
или ?
необязательный модификатор для свойств и параметров.
Это:
function foo(x : string) : number | void {
// returns nothing
}
void
и undefined
типы совместимы, но между ними есть некоторая разница.Первый предпочтителен для типов возвращаемых функций, поскольку последний требует, чтобы функция имела оператор return
:
function foo(x : string) : number | undefined {
return;
}
Maybe
можно реализовать с универсальным типом.Явный тип Nothing
может быть реализован с уникальным символом:
const Nothing = Symbol('nothing');
type Nothing = typeof Nothing;
type Maybe<T> = T | Nothing;
function foo(x : string) : Maybe<number> {
return Nothing;
}
или классом (частные поля могут использоваться для предотвращения приёма):
abstract class Nothing {
private tag = 'nothing'
}
type Maybe<T> = T | typeof Nothing;
function foo(x : string) : Maybe<number> {
return Nothing;
}
Обратите внимание, что типы классов обозначают класстип экземпляра и требуется использовать typeof
при обращении к классу.
Или объект (если желательна утка):
const Nothing: { tag: 'Nothing' } = { tag: 'Nothing' };
type Nothing = typeof Nothing;
type Maybe<T> = T | Nothing;
function foo(x : string) : Maybe<number> {
return Nothing;
}