2016-09-22 18 views
0

VS2013을 사용하고 있고 React (0.14) 및 Typescript (1.8.5)를 사용하도록 기존 프로젝트를 설정하고 있습니다. 내 React 코드는 JSX 파일로 잘 작동합니다. 새 TSX 파일에 하나의 오류가 있습니다. 알아낼 수 없습니다. 모든이 나무 아래 구성 요소에 붙여 법안에Typescript (TSX 파일)로 React의 하위 구성 요소에 소품 전달

나는 30 이상한 오류가 -이 모든 읽기 :

재산권 'nameOfProp'IntrinsicAttributes '유형에 존재하지 않는 & IntrinsicClassAttributes> & {} & {아이들 ? : Reac ... '.

다음은 TypeScript를 가져 오는 예제 코드입니다. 어떤 도움이라도 극대화 될 것입니다. 이것은 생산에서 React를 시작하고 실행하는 데있어 마지막 장애물 중 하나이기 때문입니다. 참고 : 나는 공간을 절약하기 위해 앱 상태에 대한 정보를 포함하지 않은,하지만 (필터, 이름, ID가, 계산) 빨간 선이 하위 구성 요소 이름에만 있습니다

var App = React.createClass({ 
 
    render: function() { 
 
    render (
 
     <FilterItem 
 
     filter={this.state.artifactFilter} 
 
     count={this.state.count} 
 
     id={this.state.id} 
 
     name={this.state.name} 
 
     /> 
 
    ) 
 
    } 
 
}); 
 
var FilterItem = React.createClass({ 
 
    render: function() { 
 
    return (
 
     <span>{this.props.name} ({this.props.count})</span> 
 
) 
 
} 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.8/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.8/react-dom.min.js"></script>

답변

1

을 서명 React.createClass입니다 :

function createClass<P, S>(spec: ComponentSpec<P, S>): ClassicComponentClass<P>; 

는 일반 PS는 소품과 상태를 정의합니다.
컴파일러는 그 유형이 무엇인지 알지 못하므로 오류 발생 유형 인 기본을 사용합니다.

당신은 할 수 있습니다 :

interface AppState { 
    filter: string; 
    count: number; 
    id: string; 
    name: string; 
} 
var App = React.createClass<{}, AppState>(...); 

interface FilterItemProps { 
    count: number; 
    name: string; 
} 
var FilterItem = React.createClass<FilterItemProps, {}>(...); 

것은 당신이 클래스를 사용하는 경우 :

class App extends React.Component<{}, AppState> { 
    render() { 
     ... 
    } 
} 
+0

감사합니다 순전히! 나는 인터페이스로 실험했지만 제대로하지 못했습니다. 이제 작동합니다. 그래서 느슨한 정의를 지닌 소품을 지킬 방법이 없습니까? 나는 형식이 안전한 TSX 파일을 가지고 있어도 항상 인터페이스 선언을해야한다. – Simon

+0

'T, S'에는 항상'any, any'를 사용할 수 있습니다. 그러나 타입 안전을 잃을 것입니다. 이 경우에는 컴파일러가 올바른 유형을 추론 할 방법이 없습니다. 제 생각에는 클래스를 사용하는 것이 더 쉽고, 더 읽기 쉽고, 더 이해하기 쉽습니다. 그리고 제네릭을 추가하는 것은 중복되지 않습니다. –