描述
您经常需要从类型变量中T
获取某些类型的属性U
。
有时,像 之类的变量会发生这种情况T | null
。在这种情况下,如果null
我们返回一个值null
,否则我们将得到一个类型为 的变量U
。也就是说,结果可能是U | null
。
执行
现在我正在尝试将相同的逻辑实现为函数。这是真的吗?
function map<T, U>(value: T, callback: (object: NonNullable<T>) => NonNullable<U>): U
...好吧,就好像这样使用它:
type Nullable<T> = T | null;
let text: Nullable<string> = `Hello world`;
const size: Nullable<number> = map<Nullable<string>, Nullable<number>>(text, nonNullableText => nonNullableText.length);
在这种情况下,我做了最简单的实现:
function map<T, U>(value: T, callback: (object: NonNullable<T>) => NonNullable<U>): U {
if (value === null || value === undefined) return value; // null | undefined
else return callback(value); // NonNullable<U>
} // NonNullable<U> | null | undefined тот же самый U
Type 'T' is not assignable to type 'U'.
我在 中遇到错误return value
。
问题
嗯,理论上这个错误是逻辑上的,但是我在逻辑的哪一部分犯了错误呢?
如何...
function map<T, U>(value: T, callback: (object: NonNullable<T>) => NonNullable<U>): U
...正确实施了吗?
此外
您可以更改标题。我无法正确描述错误。
具有类型的函数:
存储执行结果的变量类型: