【问题标题】:Typescript fails to infer the argument types of function properties through optional-booleanTypescript 无法通过 optional-boolean 推断函数属性的参数类型
【发布时间】:2021-07-08 14:40:27
【问题描述】:

我正在尝试根据联合类型中特定的可选布尔属性的值来推断另一个函数属性的类型。

很难用句子解释,所以请看下面的代码和cmets:

interface SingleCallback<T> {
    func: (arg: T) => T;
    value: T;
    multiple?: false | undefined;
}

interface MultiCallback<T> {
    func: (arg: T[]) => T[];
    value: T[];
    multiple: true;
}

type Callback<T> = SingleCallback<T> | MultiCallback<T>;

const mult: Callback<number> = {
    value: [1, 2, 3],//OK
    func: (arg) => [...arg, 1, 2, 3],//OK. The arg is number[]
    multiple: true
};

const singleOk: Callback<number> = {
    value: 1,//OK
    func: (arg) => arg + 1,//OK. The arg is number
    multiple: false
};

const singleNotOk: Callback<number> = {
    value: 1,//OK
    func: (arg) => arg + 1,//Not OK. I want to make arg be inferred as a number, but it is not.
};

如果明确指定了“多个”,这将很有效。当我没有定义“多个”值时,就会出现问题。对一般属性还是可以的,但是只对函数属性的参数,不能推断类型,会报错。

这是什么原因?你能给我一些解决这个问题的想法吗?

【问题讨论】:

  • 你使用的是什么版本的 TypeScript?我在 TypeScript Playground 中尝试了最新版本,它似乎可以工作。
  • 感谢您的提示。我用的是4.3.0,这个问题好像已经在4.3.5版本解决了。
  • catchts.com/callbacks 在这里你可以找到几个关于输入回调的例子

标签: typescript boolean type-inference union-types


【解决方案1】:

自 TypeScript 4.3.2 起正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 2018-08-28
    • 2016-11-01
    • 2021-04-06
    • 2020-10-31
    • 2016-12-05
    • 2020-01-23
    相关资源
    最近更新 更多