如何使用打字稿中的StaggeredMotion样式函数解决各种错误?

时间:2019-01-24 05:45:32

标签: typescript react-motion

我要使用StaggeredMotion,如此处记录:https://github.com/chenglou/react-motion#staggeredmotion-

示例代码为

<StaggeredMotion
  defaultStyles={[{h: 0}, {h: 0}, {h: 0}]}
  styles={prevInterpolatedStyles => prevInterpolatedStyles.map((_, i) => {
    return i === 0
      ? {h: spring(100)}
      : {h: spring(prevInterpolatedStyles[i - 1].h)}
  })}>
  {interpolatingStyles =>
    <div>
      {interpolatingStyles.map((style, i) =>
        <div key={i} style={{border: '1px solid', height: style.h}} />)
      }
    </div>
  }
</StaggeredMotion>

由于我的项目是用typescript编写的,因此我需要将其转换为相应的typescript语法并符合我的项目的编码标准。

例如,它不允许使用隐式any类型。

这就是我所做的

import { StaggeredMotion, PlainStyle, spring } from 'react-motion';

const styleFn = (previousInterpolatedStyles?: PlainStyle[]) => prevInterpolatedStyles.map((tmp, i) => {
          return i === 0
              ? { h: spring(100) }
              : { h: spring(prevInterpolatedStyles[i - 1].h) };
        })
return (
    <StaggeredMotion
        defaultStyles={[{ h: 0 }, { h: 0 }, { h: 0 }]}
        styles={styleComputer}>
      />
    {interpolatingStyles =>
    <div>
      {interpolatingStyles.map((style, i) =>
        <div key={i} style={{border: '1px solid', height: style.h}} />)
     }
    </div>
   }
    </StaggeredMotion>
);

但是我从打字稿编译器中得到了很多错误:

  

错误TS7006:参数“ tmp”隐式具有“ any”类型。错误

     

错误TS7006:参数“ i”隐式具有“ any”类型。错误TS2532:   对象可能是“未定义”

我设法通过明确提供tmpi的类型信息来修复前两个问题:

const styleFn = (previousInterpolatedStyles?: PlainStyle[]) => prevInterpolatedStyles.map((tmp: PlainStyle, i: number) => {
          return i === 0
              ? { h: spring(100) }
              : { h: spring(prevInterpolatedStyles[i - 1].h) };
        })

现在我遇到了两个错误:

  

错误TS2322:类型'((prevInterpolatedStyles ?: PlainStyle [] |   未定义)=> {h:OpaqueConfig; } [] |未定义”不能分配给   类型'(previousInterpolatedStyles ?: PlainStyle [] |未定义)=>   样式[]'。输入'{h:OpaqueConfig; } [] |未定义”不是   可分配给'Style []'类型。       类型'undefined'不能分配给类型'Style []'。

如何解决此错误?

0 个答案:

没有答案