docs/typescript
Typescript
Typescript with React
- Setup react using Webpacker react installer. Then run the typescript installer
bundle exec rails webpacker:install:typescript yarn add @types/react @types/react-dom
- Rename the generated
hello_react.js
tohello_react.tsx
. Make the file valid typescript and now you can use typescript, JSX with React.
Typescript with Vue components
- Setup vue using Webpacker vue installer. Then run the typescript installer
bundle exec rails webpacker:install:typescript
- Rename generated
hello_vue.js
tohello_vue.ts
. - Change generated
config/webpack/loaders/typescript.js
from
module.exports = { test: /\.(ts|tsx)?(\.erb)?$/, use: [{ loader: 'ts-loader' }] }
to
module.exports = { test: /\.(ts|tsx)?(\.erb)?$/, use: [{ loader: 'ts-loader', options: { appendTsSuffixTo: [/\.vue$/] } }] }
and now you can use `in your
.vue` component files.
HTML templates with Typescript and Angular
After you have installed Angular using bundle exec rails webpacker:install:angular
you would need to follow these steps to add HTML templates support:
- Use
yarn
to add html-loader
yarn add html-loader
- Add html-loader to
config/webpack/environment.js
environment.loaders.append('html', { test: /\.html$/, use: [{ loader: 'html-loader', options: { minimize: true, removeAttributeQuotes: false, caseSensitive: true, customAttrSurround: [ [/#/, /(?:)/], [/\*/, /(?:)/], [/\[?\(?/, /(?:)/] ], customAttrAssign: [ /\)?\]?=/ ] } }] })
- Add
.html
toconfig/webpacker.yml
extensions: - .elm - .coffee - .html
- Setup a custom
d.ts
definition
// app/javascript/hello_angular/html.d.ts declare module "*.html" { const content: string export default content }
- Add a template.html file relative to
app.component.ts
<h1>Hello {{name}}</h1>
- Import template into
app.component.ts
import { Component } from '@angular/core' import templateString from './template.html' @Component({ selector: 'hello-angular', template: templateString }) export class AppComponent { name = 'Angular!' }
That’s all. Voila!