首页信息安全如何返回从输入对象推断出键的对象?

如何返回从输入对象推断出键的对象?

admin 07-06 06:00 190次浏览

我想在TypeScript中创建一个函数,该函数将一个对象作为参数,并返回另一个具有相同键的对象。从用户的POV基本上应该看起来像这样:

const foo = getBar({ baz: 23 });

console.log(foo.baz);

最初,我用

{[ key: string ]: number }

用作参数的类型,但这是错误的,因为这意味着每个键都必须有一个值(getBar当您尝试访问不存在的值时,可以在中内部看到它)。这就是为什么我想出一个自定义实现Dictionary

type Dictionary = {
  [key in K]?: T
};

现在,该函数的定义如下所示:

const getBar = function
  :
  Dictionary (values: T)
{
  // ...
}

现在在函数内部,我想随着时间的推移建立结果,所以我将初始化一个空对象以随着时间的推移来填充它:

const result: Dictionary = {};

当我尝试运行此脚本时,TypeScript抱怨{}无法分配给给定类型。我在这里想念什么?

此外,此方法也不能保证(从类型系统的POV中)返回的字典具有与输入对象完全相同的键。是否可以表达这一点,如果可以,如何表达?

我发现的一种解决方法(但它引入了另一个问题)是将返回值描述为:

{[ key in keyof T ]: number }

现在从外部看来似乎可以正常工作,但是在getBar函数内部无法result再向对象添加项目,因为那时TypeScript抱怨该类型string不能用于索引给定的对象类型。有什么提示吗?



1> T.J. Crowder..:

你可以用解决问题

const result: Dictionary = {};

通过使用Partial

const result: Partial = {};

这确实意味着,一旦完全填充完它,返回它时就需要在最后声明一个类型断言。

但是我可能会缺少一些东西(不会是第一次),但是我认为您不需要那种Dictionary类型的东西:

function getBar(foo: T): T {
    let retval : Partial = {};
    // ...fill in retval
    return retval as T;
}

现在如果我这样做

const x = getBar({message: "hi"});

x的类型是{message: string}

在操场上。

如何返回从输入对象推断出键的对象?
对于Haskell类型类,您该怎么做呢? 电脑无法打开小程序视频(电脑不能打开小程序)
相关内容