如何在typescript中的forEach下定义类型?

问题描述 投票:0回答:3

我有一个

PersonTypes
对象数组,并且只想在 forEach 循环内使用部分键。更 打字稿中精确、正确的编码以提供类型?我可以做类似的事情
people.forEach((person: Pick<PersonTypes, 'name' | 'gender'>
或者
people.forEach((person: PersonTypes) =>{
或者
people.forEach((person: any) =>{
在打字稿中编码的正确方法是什么

export type PersonTypes = {
  name: string;
  value: string;
  gender: boolean;
};
const people: PersonTypes[] = [
  {name: 'apl', value: 'apple', gender: true},
  {name: 'gal', value: 'google', gender: false},
]
people.forEach((person: Pick<PersonTypes, 'name' | 'gender'>) =>{
//people.forEach((person: PersonTypes) =>{
//people.forEach((person: any) =>{
  console.log(person.name);
  console.log(person.gender);
} )
typescript typescript-typings typescript2.0 typescript1.8
3个回答
27
投票

你应该坚持:

people.forEach((person: PersonTypes) =>{


});

这是因为

people
数组中的每个对象都是
PersonTypes
类型,并且实际上不需要从该类型中提取属性。

事实上,无需明确将 person 键入为

PersonTypes
,因为 people 属于
PersonTypes[]
。 TypeScript 会自动推断数组中的每个对象都是
PersonTypes
,所以这就足够了:

people.forEach((person) =>{


});  

或者,您可以选择解构参数,这将使您的函数更加简洁和干净。

people.forEach(({ name, gender }) =>{  
  console.log(name);
  console.log(gender);
});

1
投票

根据您提供的附加代码,

customZip
函数返回
any
类型,这当然会在稍后引起问题,因为数组将具有
any
类型,而不是推断的
PersonType[]

export function customZip(...arrays: Array<any>){
  return arrays
}

要解决这个问题,就像在 TypeScript 中使用泛型的概念一样简单,它允许编译器自行推断数组的类型:

export function customZip<T>(...arrays: Array<T>){
  return arrays
}

参见概念验证示例

您可以选择提供类型,或者干脆让 TypeScript 自行推断。此时这并不重要:两者都会正确编译:

// You let TypeScript do the inferring by itself
const people = [
  ...customZip([{name: 'apl', value: 'apple', gender: true},
  {name: 'gal', value: 'google', gender: false},])
];

...或者...

// Your manually inform TypeScript what the type of an array member returned from customZip looks like
const people = [
  ...customZip<PersonTypes[]>([{name: 'apl', value: 'apple', gender: true},
  {name: 'gal', value: 'google', gender: false},])
];

0
投票

我已经隐式尝试过,但它显示类型错误。

© www.soinside.com 2019 - 2024. All rights reserved.