2017-03-15 40 views
1

我刚开始将所有代码转换为与strictNullChecks一起工作。我想有以下操作的功能:创建一个从union类型中删除null的函数签名

function defaultValue<TUnionNull>(value: TUnionNull, default: TWithoutNull): TWithoutNUll{ 
    return value == null ? default : value 
} 

function requiresNotNullString(): void 

var name: string | null; 

var checkedName: string = defaultValue(name, "Fred"); 

换句话说,如果该函数的输入为string | null我想返回类型为string

这可能吗?

回答

1

如何:

function defaultValue<T>(value: T | null, defaultValue: T): T { 
    return value == null ? defaultValue : value 
} 

(改成了defaultValue因为default不能使用)

example in playground由@Roaders提供)

+0

感谢。这与我刚刚提出的相同。它可以工作,但要求你将一个类型传递给函数:'defaultValue (value,default)'如果不需要'',将会很好 – Roaders

+1

不,编译器推断'T'关于你作为“价值”传递的信息。我检查了你的代码,它编译得很好 –

+0

如果'value'是'string | null“,那么返回类型将是'string |所以'var返回:string = defaultValue('将失败,因为可能会返回null。 – Roaders