将来自其他对象的参数作为已定义类型打字稿中的参数传递对象文字只能指定已知属性ts2345

问题描述

我有一个带有很多参数的复杂函数,所以我定义了自己的类型:

type foo = {
  int: number;
  str: string;
  bool: boolean;
}

为了更清晰地使用参数和回调,我定义了如下函数:

function fooHandler(foo:foo) {
  console.log(foo);
}

function useCallback(foo:foo,callback: (foo:foo) => void):void {
  console.log('callback call:');
  callback(foo);
}

然后,以一种执行方法,我可以创建一个与foo类型相同的对象,指定是否指定类型

const myInlineObj = {
    int: 3,str: 'whatever',bool: false,};

useCallback(myInlineObj,fooHandler);

输出:

callback call:
src/main.ts:160
{int: 3,bool: false}

所以工作正常。我还可以在类型拟合对象中将备用参数作为参数插入,如下所示:

const int = 3;
const str = 'Hello';
const bool = true;
useCallback({ int,str,bool },str: 'Hello',bool: true}

但是我不能做的是即使适合foo类型,也要在参数中传入另一个对象参数。 例如:

useCallback({ int,myInlineObj.bool },fooHandler);

我得到一个错误:对象文字只能指定已知的属性,并且'foo'.ts(2345)类型中不存在'myInlineObj'。 将类型中的参数命名为myInlineObj.bool无效,因此尽管元素适合容器对象的类型,但我不知道如何将另一个对象特定的参数作为参数传递。

我知道我可以传递整个对象,并可以在方法内部访问.bool作为属性,但是如果对象很大,则传递整个对象似乎不是最佳选择,并且不如传递直接需要特定参数。

有关此操作的任何提示?谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...