在尝试向组件中添加ref时,出现提示错误:
TS2339:属性“ childNavRef”在“导航”类型上不存在
如何正确附加打字稿反应组件的参考?谢谢,您可以在下面看到该组件的代码以及tsconfig和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',
}
}
},
};
答案 0 :(得分:3)
您必须先声明成员,然后才能使用它们。
尝试一下:
public class TurnoDataTemplateSelector : DataTemplateSelector
{
public DataTemplate Turno1Template{ get; set; }
public DataTemplate Turno2Template{ get; set; }
public DataTemplate Turno2Template{ get; set; }
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
TurnoType type = ((Turno)item).Type;
switch (type)
{
case TurnoType.One:
return Turno1Template;
case TurnoType.Two:
return Turno2Template;
case TurnoType.Three:
return Turno3Template;
default:
return null;
}
}
}
您也可以尝试此操作,并让TypeScript自动推断变量类型:
export default class Navigation extends React.Component<{}, MyState> {
// Declare the private member variable
private childNavRef: React.RefObject<HTMLDivElement>;
public constructor() {
super({});
this.state = {
show: true,
};
this.childNavRef = React.createRef();
}
...