рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдФрд░ рдореИрдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдПрдХ рдШрдЯрдХ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ --with-typescript рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрдирд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд░рдЦреЗрдВ рдЬрдмрдХрд┐ рдирдИ рдлрд╛рдЗрд▓реЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЕрдкрдирд╛рдПрдВред
рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ razzle рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ?
рдЕрд░реЗ, рдореБрдЭреЗ рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдкреНрд░рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рд╡рд╛рд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП with-typescript
рдЙрджрд╛рд╣рд░рдг рдХреЛ jsx
рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рди рд╕рдордп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред
рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕ рд▓рдХреНрд╖реНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ?
рдврд╝реВрдБрдв рдирд┐рдХрд╛рд▓рд╛!
npm i -D @babel/preset-typescript ts-loader typescript
@babel/typescript
рдХреЛ .babelrc . рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
"presets": [
"razzle/babel",
"@babel/typescript"
]
рдЗрд╕реЗ razzle.config.js . рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
config.resolve.extensions = config.resolve.extensions.concat(['.ts', '.tsx']);
config.module.rules.push({ test: /\.tsx?$/, loader: 'ts-loader' });
рдПрдХ tsconfig.json рдмрдирд╛рдПрдВ
{
"compilerOptions": {
"experimentalDecorators": true,
// Target latest version of ECMAScript.
"target": "esnext",
// Search under node_modules for non-relative imports.
"moduleResolution": "node",
// Process & infer types from .js files.
"allowJs": false,
// Enable strictest settings like strictNullChecks & noImplicitAny.
"strict": false,
// Disallow features that require cross-file information for emit.
"isolatedModules": true,
// Import non-ES modules as default imports.
"esModuleInterop": true,
"jsx": "react"
},
"include": [
"src"
],
"exclude": [
"node_modules",
]
}
рдмрд╕, рдЕрдм рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ .ts рдФрд░ .tsx рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдпрджрд┐ рдЖрдк рднрд╡рд┐рд╖реНрдп рд╕реЗ рдпрд╣рд╛рдВ рдЖ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рд╢рд╛рдирджрд╛рд░ рд░реИрдЬрд╝рд▓-рд╕рдорд░реНрдерд┐рдд рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд▓рдЧрдЗрди рдЪреЗрдХрдЖрдЙрдЯ рдХрд░реЗрдВ ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдврд╝реВрдБрдв рдирд┐рдХрд╛рд▓рд╛!
npm i -D @babel/preset-typescript ts-loader typescript
@babel/typescript
рдХреЛ .babelrc . рдореЗрдВ рдЬреЛрдбрд╝реЗрдВрдЗрд╕реЗ razzle.config.js . рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
рдПрдХ tsconfig.json рдмрдирд╛рдПрдВ
рдмрд╕, рдЕрдм рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ .ts рдФрд░ .tsx рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред