Lorsque vous essayez d'ajouter un réf. à mon composant, je reçois une erreur de charpie :
TS2339 : La propriété 'childNavRef' n'existe pas sur le type 'Navigation'.
Comment joindre correctement une référence pour un composant react typecript ? Merci, et vous pouvez voir le code ci-dessous pour le composant ainsi que le tsconfig et eslint.
navigation.tsx :
import * as React from 'react';
interface MyState {
show: boolean;
}
export default class Navigation extends React.Component<{}, MyState> {
public constructor() {
super({});
this.state = {
show: true,
};
this.childNavRef = React.createRef();
}
public render(): React.ReactElement {
return (
<nav>
{
this.state.show
&& (
<div ref={this.childNavRef}>
This is a component
</div>
)
}
</nav>
);
}
}
tsconfig.json :
{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": true,
"noImplicitAny": true,
"module": "es6",
"moduleResolution": "node",
"target": "es5",
"jsx": "react",
"allowJs": true,
"baseUrl": ".",
"paths": {
"actions/*": ["src/app/redux/actions/*"],
}
}
}
.estlintrc :
module.exports = {
env: {
'jest/globals': true
},
extends: [
'airbnb',
'plugin:@typescript-eslint/recommended',
],
globals: {
'document': true,
'window': true,
},
overrides: [
{
'files': ['**/*.tsx'],
'rules': {
'react/prop-types': 'off'
}
}
],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaFeatures: {
jsx: true,
},
project: './tsconfig.json',
},
plugins: ['@typescript-eslint', 'jest'],
rules: {
'import/no-extraneous-dependencies': [
'error',
{
'devDependencies': [
'**/*.stories.jsx',
'**/*.stories.tsx',
'**/*.test.jsx',
'**/*.test.js',
'**/*.test.tsx',
'**/*.test.ts',
'setupTests.js',
],
},
],
'@typescript-eslint/camelcase': ['error', { 'properties': 'never' }],
'indent': 'off',
'@typescript-eslint/indent': [
'error',
2,
{
'ignoredNodes': ['JSXElement'],
'SwitchCase': 1,
},
],
'@typescript-eslint/explicit-function-return-type': ['error', {
'allowExpressions': true,
'allowTypedFunctionExpressions': true
}],
'semi': 'off',
'@typescript-eslint/semi': ['error'],
'react/destructuring-assignment': [false, 'always', { 'ignoreClassFields': true }],
'react/jsx-filename-extension': [1, { 'extensions': ['.jsx', '.tsx'] }],
},
settings: {
'import/extensions': [
'.js',
'.jsx',
'.ts',
'.tsx',
],
'import/resolver': {
webpack: {
config: 'webpack.common.js',
}
}
},
};