Несколько проблем с Typescript / tslint - PullRequest
0 голосов
/ 23 декабря 2018

Я новичок в Typescript!Просто пытаюсь сделать базовую аннотацию в качестве начала

Во-первых, один из импортеров продолжает кричать Во-вторых, type не обнаруживается внутри деструктуризации объектов В-третьих, jsx работает неправильно, кажется.

Мой код

import * as React from "react";
import { useMappedState } from "redux-react-hook";
import TodoItem from "./TodoItem";

type TodosReducer = {
    todos: []
}
const mapState = ({ todosReducer: TodosReducer }) => ({
  todoCount: todosReducer.todos.length,
  todos: todosReducer.todos
});

export default function TodoList(): HTMLDivElement {
  const { todoCount, todos } = useMappedState(mapState);
  return (
    <div>
      <div>You have {todoCount} todos</div>
      <ul>
        {
            todos.map((todo: string, index: number) => <li key={index} {...todo}>,/li.)
        }
      </ul>
    </div>
  );
}

Хорошо.Строка 2 redux-react-hook продолжает кричать, не может найти посылку.'response' делал то же самое в строке 1, если я не запустил yarn install в этой ветке снова.

Тогда я не могу в строке mapState tslint продолжает говорить

[ts] 'TodosReducer' is declared but its value is never read. [ts] Binding element 'TodosReducer' implicitly has an 'any' type.

Так что в основном у меня есть определенный выше тип для TodosReducer, но все же.

Наконец, внутри функции TodoList, возвращая <div>...</div>, tslint продолжает говорить cannot find name div для всех элементов

cat tsconfig.json

{
  "compilerOptions": {
    "target": "es6",                       
    "module": "es6",                     
    "allowJs": true,                     
    "jsx": "react",                     
    "sourceMap": true,                     
    "outDir": "./dist",                       

    "strict": true,                        
    "noImplicitAny": true,                

    "moduleResolution": "node"

  }
}

1 Ответ

0 голосов
/ 23 декабря 2018

Сторонние пакеты должны иметь типизацию в TypeScript.@types/react должен быть установлен вместе с react и т. Д.

const mapState = ({ todosReducer: TodosReducer }) => ({ ... })

- неверный синтаксис для параметра todosReducer.Это рассматривается как синтаксис деструктуры ES6.Правильное значение:

...
type TodosState = { todosReducer: TodosReducer };

const mapState = ({ todosReducer }: TodosState) => ({ ... );

useMappedState - универсальная функция, ее следует использовать как:

useMappedState<TodosState>(mapState);
...