javascript - Typescript-alias import met automatisch aanvullen
===== 2021/03/17 Update =====
Als iemand nog steeds hetzelfde probleem heeft. Je kunt dit proberen:
webpack.config.js
module.exports = {
...
resolve: {
alias: {
components: path.resolve(process.cwd(), './src/components'),
},
},
};
tsconfig.json
{
...
"baseUrl": ".",
"path": {
"components/*": ["./src/components/*"]
}
}
===== Oorspronkelijke bericht =====
Ik heb hieronder een Alert React-component:
import React from 'react';
interface Props {
message: string;
};
const Alert = (props: Props) => {
return (
<div>{props.message}</div>
);
};
export default Alert;
Ik gebruik de alias import in plaats van de relative import:
// alias import
import Alert from 'components/Alert';
// relative import
// import Alert from '../../components/Alert';
const App = () => {
return (
<div>
<Alert message="I want to know the interface of Alert" />
</div>
);
};
export default App;
Als ik "<Alert me" typ in relatieve import, zal VSCode de opties voor automatisch aanvullen tonen.
Echter, wanneer ik de alias import gebruik, zal VSCode de auto-aanvulling niet tonen.
Is er een mogelijke manier om VSCode te laten weten dat 'components/Alert' '../../components/Alert' is, en mij de auto-complete te laten zien zodat ik de interface van de props van Alert kan begrijpen?
Hier is hoe ik de alias instel, ik had zowel webpack-configuratie als tsconfig geprobeerd:
webpack.config.js
...
resolve: {
modules: ['node_modules', 'src'],
extensions: ['.ts', '.tsx', '.js', '.jsx'],
mainFields: ['browser', 'jsnext:main', 'main'],
alias: {
'components/*': path.resolve(process.cwd(), 'src/components/*'),
'containers/*': path.resolve(process.cwd(), 'src/containers/*'),
'images/*': path.resolve(process.cwd(), 'src/images/*'),
'hooks/*': path.resolve(process.cwd(), 'src/hooks/*'),
},
}
tsconfig.json
"compilerOptions": {
...
"baseUrl": "src",
"paths": {
"components": ["components"],
"containers": ["containers"],
"images": ["images"],
"hooks": ["hooks"]
}
},
"include": ["src/**/*.ts", "src/**/*.tsx"],
"exclude": ["node_modules"]
mappenstructuur:
- src
- components
- Alert
- index.tsx
- containers
- App
- index.tsx
Antwoord #1
Je moet de optie baseUrl instellen als relatief ten opzichte van de paden die je alias gebruikt, dus als je een aliaspad hebt ingesteld op ./src/components, dan is de baseUrl van dat pad ./.
Hier is een voorbeeld:
"baseUrl": "./",
"paths": {
"@components/*": [
"./src/components/*"
],
of
"baseUrl": "./src",
"paths": {
"@components/*": [
"components/*"
],
