如何使用 strictNullChecks 进行泛型类型推断以匹配限制较少的类型?
How to get generic type inference with strictNullChecks to match on less restrictive type?
我有一个带有两个参数的通用函数,其中一个是类型变量、null 和 undefined 的总和,另一个只是类型变量。 Typescript 正在从第二个参数推断类型变量。
我已经知道如何对此进行注释 - 使用 <>
显式设置类型变量或对第二个参数进行类型断言。
我正在考虑深入研究条件类型,看看它们是否可以过滤掉,但我不清楚它们是否可以。
const or = <T>(x: T|null|undefined, y:T): T =>
x === null || x === undefined ? y : x;
const test: Map<string,number> = new Map();
const result = or(test.get('test'), 0);
我希望它进行类型检查,并且 result
应该具有类型 number
- 相反我得到 "Type 'number' is not assignable to type '0 | null | undefined'.".
与某物列表和空列表一样,我知道某物不可分配给 never
。
我明白了。
const or = <T, S extends T>(x: T|null|undefined, y:S>: T =>
x === null || x == undefined ? y : x;
我从一个稍微复杂一些的条件类型开始,然后意识到我可以将该假设转移到一个额外的类型参数中。
我有一个带有两个参数的通用函数,其中一个是类型变量、null 和 undefined 的总和,另一个只是类型变量。 Typescript 正在从第二个参数推断类型变量。
我已经知道如何对此进行注释 - 使用 <>
显式设置类型变量或对第二个参数进行类型断言。
我正在考虑深入研究条件类型,看看它们是否可以过滤掉,但我不清楚它们是否可以。
const or = <T>(x: T|null|undefined, y:T): T =>
x === null || x === undefined ? y : x;
const test: Map<string,number> = new Map();
const result = or(test.get('test'), 0);
我希望它进行类型检查,并且 result
应该具有类型 number
- 相反我得到 "Type 'number' is not assignable to type '0 | null | undefined'.".
与某物列表和空列表一样,我知道某物不可分配给 never
。
我明白了。
const or = <T, S extends T>(x: T|null|undefined, y:S>: T =>
x === null || x == undefined ? y : x;
我从一个稍微复杂一些的条件类型开始,然后意识到我可以将该假设转移到一个额外的类型参数中。