我有这个打字稿代码
type X = (<T extends number | string>(a: T) => (b: T) => T)
const f: X = (a: any) => (b: any) => a + b
f(1)(2)
Run Code Online (Sandbox Code Playgroud)
它显示错误
Argument of type '2' is not assignable to parameter of type '1'.
Run Code Online (Sandbox Code Playgroud)
第一个参数中的推断类型是'1'但我希望它对number泛型具有相同的约束string | number。
传递的参数类型只能是number或 ,string即约束为string | number。
这对你的情况有用吗?
type XGen<T extends string | number> = (a: T) => (b: T) => T;
type X = XGen<string> & XGen<number>;
const f: X = (a: any) => (b: any) => a + b;
f(1)(2);
f(1)('2'); // error
f('1')('2');
f([])([]); // error
Run Code Online (Sandbox Code Playgroud)
目标是指示 TypeScript 仅在string和之间进行选择number(不猜测扩展其联合的任何其他类型(例如1在您的示例中))。我们通过创建一个基本的通用帮助器类型并创建 和 的交集类型(因此强制打字稿仅在这两者之间进行选择)来实现这XGen一点。XGen<string>XGen<number>
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |