schema2type
Using schema2type, you can generate TypeScript type definitions from Rails'schema.rb automatically.
Start with a schema.rb:
ActiveRecord::Schema.define(version: xxxx) do
create_table "Users", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.string "name"
t.integer "age"
t.bigint "sales"
t.boolean "paid", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["patient_id"], name: "index_histories_on_patient_id"
end
end
Automatically have the following TypesScript type generated.
declare namespace schema {
type User = {
id: number;
name: string | null;
age: number | null;
sales: number | null;
paid: boolean;
createdAt: string;
updatedAt: string;
}
}
Installation
Add this line to your application's Gemfile:
gem 'schema2type'
And then execute:
$ bundle
Or install it yourself as:
$ gem install schema2type
Usage
bundle exec schema2type -o schema.d.ts
options
| command | require | default | detail |
|---|---|---|---|
| -o | true | - | Output file name of TypeScript |
| -s | false | "./db/schema.rb" | Path of your schema.rb |
| -n | false | "schema" | Name of declare namespace |
| --snake | false | false | Convert property name to snake_case |
conversion table
the schema2type convert as per this conversion table.
| create_table block method | converted Type |
|---|---|
| string | string |
| text | string |
| json | Record |
| jsonb | Record |
| binary | string |
| inet | string |
| integer | number |
| bigint | number |
| float | number |
| decimal | number |
| boolean | boolean |
| date | string |
| datetime | string |
| timestamp | string |
| datetime_with_timezone | string |
License
The gem is available as open source under the terms of the MIT License.