如何在没有赋值的情况下返回时键入对象

时间:2018-05-09 18:54:48

标签: typescript

我似乎无法弄清楚如何在没有作业的情况下归还对象。

示例:

interface Foo{
  a: string;
}

const arr = ['a','b','c'];

arr.map(item => {
  return { a: item }; //I want type safety on Foo here
});

// Don't want to have to do this
arr.map(item => {
  let ret: Foo = { a: item }; //first assign
  return ret;
});

我希望像return :Foo { a: item };这样的东西可以工作,但事实并非如此。我不想使用return { a: item } as Foo;因为它不是类型安全的。

2 个答案:

答案 0 :(得分:3)

您可以注释箭头函数的返回类型:

arr.map((item): Foo => {
  return { a: item }; 
});

类似于

arr.map(function f(item): Foo {
  return { a: item }; 
});

使用常规函数表示法,或者更明显:

function mapper(item: string): Foo {
  return {a: item};
}
arr.map(mapper);

嗯,除了两个箭头函数外,item的类型从上下文推断为string。在独立功能中,您需要明确指定string。但是在所有示例中,返回类型都指定为Foo并且类型安全。

这有帮助吗?

答案 1 :(得分:2)

这是通用的通用词。如果方法被键入为泛型(fill=TRUE方法),则可以传递可选的泛型参数以提供其他类型信息。

这个通用参数完全是指定回调返回类型:

map

应该是:

Array