Как правильно импортировать React JSX из отдельного файла в Typescript 1.6

у меня есть следующие приложения.tsx-файл работает нормально, загружая элемент приложения из React.Компонент и дочерний элемент рабочего списка из другого React.Component (оба класса определены в одном приложении.файл ЦХ). Это работает в Visual Studio с установленным Typescript 1.6 (версия ECMAScript: ECMAScript 5, компиляция JSX: React, модульная система: CommonJS).

однако я хотел бы разделить эти два компонента на отдельные файлы. Однако, когда я раскомментирую импорт WorkList и удалите определение класса для компонента WorkList из приложения.ЦХ - он терпит неудачу с ошибкой:

ошибка TS2604 JSX тип элемента "рабочий список" не имеет какой-либо конструкции или подписи звонков.

вот рабочее приложение.tsx и желаемый рабочий список.tsx.

// app.tsx
import * as React from "react";
import * as ReactDOM  from "react-dom";
//import * as WorkList from "./worklist";

interface Props {
    foo: string;
}

class WorkList extends React.Component<Props, {}> {
    constructor(props: Props) {
        super(props);
    }
    render() {
        return <h2>WorkList!{this.props.foo} </h2>
    }
}
class App extends React.Component<Props, {}> {
    constructor(props: Props) {
        super(props);
    }
    public render() {
        return <WorkList foo="baz"></WorkList>
    }
}


ReactDOM.render(    
    React.createElement(App, { foo: 'bar' }),
    document.getElementById('app')
);




//worklist.tsx
import * as React from "react";

interface Props {
    foo: string;
}

class WorkList extends React.Component<Props, {}> {
    constructor(props: Props) {
        super(props);
    }
    render() {
        return <h2>WorkList!{this.props.foo} </h2>
    }
}

<WorkList foo="bar" />

Как правильно импортировать дочерний JSX с Typescript 1.6?

вот рабочий код с правильным ответом применяется:

// app.tsx
import * as React from "react";
import * as ReactDOM  from "react-dom";
import WorkList from "./worklist";

interface Props {
    foo: string;
}

class App extends React.Component<Props, {}> {
    constructor(props: Props) {
        super(props);
    }
    public render() {
        return <WorkList foo="baz"></WorkList>
    }
}       
ReactDOM.render(

    React.createElement(App, { foo: 'bar' }),
    document.getElementById('app')
);

//worklist.tsx
import * as React from "react";

interface Props {
    foo: string;
}

export default class WorkList extends React.Component<Props, {}> {
    constructor(props: Props) {
        super(props);
    }
    render() {
        return <h2>WorkList!{this.props.foo} </h2>
    }
}

1 ответов


Я ожидаю, что вам нужно правильно экспортировать WorkList класс worklist.tsx файл, например, как экспорт по умолчанию:

export default class WorkList extend React.Component<Props, {}>

и затем импортировать его в app.tsx:

import WorkList from "worklist"

Это должно решить вашу проблему.