创建一个从联合类型中删除 null 的函数签名

Creating a function signature that removes null from a union type

我刚刚开始转换我的所有代码以使用 strictNullChecks。我想要一个执行以下操作的函数:

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 我希望 return 类型是 string

这可能吗?

怎么样:

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

(因为default不能用所以改为defaultValue)

(example in playground由@Roaders提供)