やってみた
Nuxt.js in TypeScriptͬͯΈͨnunulkΒΒͼΎ͏ʮͬͯΈͨʯറΓͷLTେձ
View Slide
ࣗݾհ const name: Name = 'nunulk(͵͵Δ͘)'let job: Job = 'ϑϦʔϥϯεͷΣϒΞϓϦέʔγϣϯΤϯδχΞ'let languages: Language[] = [ 'C/C++', ‘Java', 'PHP', ‘JavaScript', ‘TypeScript’, ]let frameworks: Framework[] = [ 'CodeIgniter', 'Symfony', 'CakePHP', ‘Laravel',]
ຊ͢͜ͱ• Nuxt.js ͱ TypeScript ͷհ• Nuxt.js ͷ TypeScript ରԠঢ়گ• Nuxt.js Λ TypeScript Ͱಈ͔ͯ͠ΈΔ
Nuxt.js, TypeScript ͷհ
Nuxt.js ͱ“Nuxt.js Vue ΞϓϦέʔγϣϯΛ࡞͢ΔϑϨʔϜϫʔΫͰ͢ɻϢχόʔαϧΞϓϦέʔγϣϯɺ੩తʹੜ͞ΕΔΞϓϦέʔγϣϯɺγϯάϧϖʔδΞϓϦέʔγϣϯͷத͔Β࡞͢ΔΞϓϦέʔγϣϯΛબͿ͜ͱ͕Ͱ͖·͢ɻ”- ͡Ίʹ - Nuxt.js
Nuxt.js ͱ• vue, vuex, vue-router, vue-server-renderer,vue-meta શ෦ೖΓ• ϧʔςΟϯάͷࣗಈԽɺmiddleware• Vue ίϯϙʔωϯτͱ Vuex Store ͷ࣮ʹઐ೦Ͱ͖Δ
TypeScript ͱ“TypeScript ϚΠΫϩιϑτʹΑͬͯ։ൃ͞Εɺϝϯςφϯε͞Ε͍ͯΔϑϦʔͰΦʔϓϯιʔεͷϓϩάϥϛϯάݴޠͰ͋ΔɻTypeScriptJavaScriptʹରͯ͠ɺলུՄೳͳ੩తܕ͚ͱΫϥεϕʔεΦϒδΣΫτࢦΛՃ͑ͨݫີͳεʔύʔηοτͱͳ͍ͬͯΔɻ”- Wikipedia
TypeScript ͱlet t: [string, number] = ['Jan', 1]enum Color { Red, Green, Blue }const c: Color = Color.Greeninterface Food {name: stringcalories: number}class Menu {items: string[]pages: numberconstructor(items: string[], pages: number) {this.items = itemsthis.pages = pages}}
Nuxt.js ͷ TypeScript ରԠঢ়گ
Template
Packages• nuxt-property-decorator: vue-class-component ͷϥούʔ• vuex-class: vuex ؔ࿈ͷܕఆٛ• axios: ඇಉظHTTP௨৴
Nuxt.js Λ TypeScript Ͱಈ͔ͯ͠ΈΔ
υϝΠϯͷܕͱRootState ͷఆٛ export interface Task {title: string;status: TaskStatus;}export enum TaskStatus {Open = 'open',Doing = 'doing',Closed = 'closed',} export interface RootState {tasks: Task[];}
Vue, Decorator ͷ import <br/>import {<br/>Vue,<br/>Component,<br/>Prop } from 'nuxt-property-decorator'<br/>@Component({})<br/>export default class extends Vue {<br/>@Prop() value: Task<br/>}<br/>
Store ͷ࣮export const state = (): RootState => ({tasks: [],})export const mutations: MutationTree = {setTasks(state: RootState, tasks: Task[]): void {state.tasks = tasks},addTask(state: RootState, task: Task): void {state.tasks.push({...task})},} export const actions: ActionTree = {async fetchTasks({ commit }) {const tasks: Task[] = await api.fetchTasks()commit("setTasks", tasks)}}