【问题标题】:how to fix type never problem in react-native如何在 react-native 中修复类型永远不会出现问题
【发布时间】:2021-05-11 13:04:04
【问题描述】:

我是本机反应的新手,并且正在关注本教程:enter link description here 现在我们正在制作一系列可滚动的目标,我完全按照他在视频中所做的,但我收到以下错误:

    Argument of type '(currentGoals: never[]) => { key: string; value: string; }[]' is not assignable to parameter of type 'SetStateAction<never[]>'.
  Type '(currentGoals: never[]) => { key: string; value: string; }[]' is not assignable to type '(prevState: never[]) => never[]'.
    Type '{ key: string; value: string; }[]' is not assignable to type 'never[]'.
      Type '{ key: string; value: string; }' is not assignable to type 'never'.ts(2345)

对于函数:第 14 行的 addGoal() 和部分 setGoalsList。但我不明白为什么,因为youtube上的导师和我有相同的代码,但没有得到错误。有人可以指点我的错误是什么吗?

这是我的代码

const [enteredGoal, setGoal] = useState('');
  const [courseGoals, setGoalsList] = useState([]);

  function goalInput(enteredText) {
    setGoal(enteredText)
  };

  function addGOal() {

    setGoalsList(currentGoals => [...currentGoals, {
      key: Math.random().toString(), value: enteredGoal
    }]);

  };


  return (
    <View style={styles.mainContainer}>
      <View style={styles.secondContainer}>
        <Input placeholder="regular" style={styles.textInput}
          onChangeText={goalInput}
          value={enteredGoal}
        >


        </Input>
        <Button onlyIcon icon="plus" iconFamily="antdesign" iconSize={30}
          color="info" iconColor="#fff" style={styles.button}
          onPress={addGOal} />
      </View>


      <FlatList data={courseGoals} renderItem={itemData => (
        <View >
          <Text >
            {itemData.item.value}
          </Text>
        </View>
      )} 
      />

      <View>

      </View>





    </View>

  );
}

【问题讨论】:

    标签: javascript android ios typescript react-native


    【解决方案1】:
    const [courseGoals, setGoalsList] = useState([]);
    

    由于这里没有类型信息,因此 typescript 必须尝试推断您所考虑的状态类型。 Typescript 不知道你想要数组的内容是什么,所以它求助于never[],这对你来说不是很有用。

    相反,您需要指定状态是什么类型:

    interface Goal {
      key: string;
      value: string;
    }
    
    const [courseGoals, setGoalsList] = useState<Goal[]>([]);
    

    【讨论】:

    • 嘿,谢谢它解决了另一个简短的问题。在我的enteredText 的goalInput 函数中,它说:参数'enteredText' 隐含地具有'any' 类型。这是个问题吗?
    • Typescript has a setting 禁止隐含的any。这样做的好处是它强制你添加类型,因此它让 typescript 为你提供关于你的代码的最大数量的反馈。如果您正在将旧代码库从 javascript 转换为 typescript,您可能会因为它太嘈杂而将其关闭,否则我建议您保持设置打开。要使错误消失,只需向变量添加一个类型。例如:function goalInput(enteredText: string) {
    猜你喜欢
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    • 1970-01-01
    • 2022-01-02
    • 2012-01-05
    • 1970-01-01
    相关资源
    最近更新 更多