I have these interfaces:
export interface DocRow { docName: string; docDate: string; docUrl: string; packId: string; } interface Props { docRow: DocRow[]; packTitle: string; policy: string; }
My code also has this render
method:
render() { return this.props.docRow.map(docRow => { const {packTitle} = this.props; const docDateFormatted = moment(docRow.docDate, 'DDMMYYYY').format('Do MMMM YYYY'); if (docRow.docName === 'Cert' && !this.consentGiven(this.props.policy, docRow.docUrl)) { return ( <tr key={docRow.docUrl} className="document-row-disabled document-disabled"> <td><IssueButton policy={this.props.policy} dRow={docRow} /></td> <td className="document-cell document-cell--name">{docRow.docName}</td> <td className="document-cell document-cell--data"> <span>{docDateFormatted}</span> <span className="PDF-text">PDF</span> </td> </tr> ); } });
My IssueButton currently looks like this(work in progress):
interface Props { dRow: DocRow[]; policy: string; } interface State { disableIssueButton: boolean; showIssueCertPrompt: boolean; } export class IssueButton extends React.Component<Props, State> { IssueCertService: IssueCertService; constructor(props: Props) { super(props); this.issueCertService = new IssueCertService(); this.state = { disableIssueButton: false, showIssueCertPrompt: false }; } render() { if (this.props.dRow.docName === 'Cert') { return ( <Button primary={true} fullWidth={false} disabled={this.state.disableIssueButton} > Issue cert </Button> ); } else { return; } } }
In line <td><IssueButton policy={this.props.policy} dRow={docRow} /></td>
dRow
has this error:
Type ‘DocRow’ is missing the following properties from type ‘DocRow[]’: length, pop, push, concat, and 26 more.ts(2740) IssueButton.tsx(9, 3): The expected type comes from property ‘dRow’ which is declared here on type ‘IntrinsicAttributes & IntrinsicClassAttributes & Readonly & Readonly<{ …; }>’
and in line if (this.props.dRow.docName === 'Certificate and Disc') {
of IssueButton
I have this:
Property ‘docName’ does not exist on type ‘DocRow[]’.ts(2339)
I suspect I need to do some sort of a map
in my IssueButton
but I also thought return this.props.docRow.map(docRow => {
should single out wach DocRow element. How do I resolve this?
Advertisement
Answer
Change dRow={[docRow]}
to dRow={docRow}
and
render() { if (this.props.dRow.docName === 'Cert') { return ( <Button primary={true} fullWidth={false} disabled={this.state.disableIssueButton} > Issue cert </Button> ); } else { return; } }
to
render() { return this.props.dRow.map(dRow => { if (dRow.docName === 'Cert') { return ( <Button primary={true} fullWidth={false} disabled={this.state.disableIssueButton} > Issue cert </Button> ); } else { return; } } }