LoginSignup
0
0

More than 3 years have passed since last update.

Vuetifyのbreakpointのnameはstringだけじゃない

Posted at

結論

export type BreakpointName = number | 'xs' | 'sm' | 'md' | 'lg' | 'xl'

export interface Breakpoint {
  name: BreakpointName
  // 省略
}

問題提起

vuetify.breakpoint.namestringを指定するとこんなエラーが出ていた

The types of 'name' are incompatible between these types.
  Type 'BreakpointName' is not assignable to type 'string'.
    Type 'number' is not assignable to type 'string'.

stringだけじゃないのか??

Vuetifyの公式ドキュメントを読むとstringが帰ってくるのかと思った。
https://vuetifyjs.com/ja/customization/breakpoints/

解説

Vuetifyのソースコードを読んでみよう

VueitfyのBreakpointの型

今回はブレークポイントのTypesだけ見れればいいので下記のリンクのファイルを確認

  1. どうやらBreakpoint.nameがBreakpointNameらしい
  2. BreakpointNameはnumber | 'xs' | 'sm' | 'md' | 'lg' | 'xl'が入る事がわかる

packages/vuetify/types/services/breakpoint.d.ts
// Types
export type BreakpointName = number | 'xs' | 'sm' | 'md' | 'lg' | 'xl'

// Interfaces
export interface Breakpoint {
  height: number
  lg: boolean
  lgAndDown: boolean
  lgAndUp: boolean
  lgOnly: boolean
  md: boolean
  mdAndDown: boolean
  mdAndUp: boolean
  mdOnly: boolean
  name: BreakpointName
  sm: boolean
  smAndDown: boolean
  smAndUp: boolean
  smOnly: boolean
  width: number
  xl: boolean
  xlOnly: boolean
  xs: boolean
  xsOnly: boolean
  mobile: boolean
  mobileBreakpoint: BreakpointName
  thresholds: BreakpointThresholds
  scrollBarWidth: number
}

export interface BreakpointOptions {
  mobileBreakpoint?: BreakpointName
  scrollBarWidth?: number
  thresholds?: Partial<BreakpointThresholds>
}

export interface BreakpointThresholds {
  xs: number
  sm: number
  md: number
  lg: number
}

なぜBreakpointNameにNumberが入るの?

先程のコードの抜粋を見るとnameとmobileBreakpointにBreakpointNameが使われているらしい。

packages/vuetify/types/services/breakpoint.d.ts
export type BreakpointName = number | 'xs' | 'sm' | 'md' | 'lg' | 'xl'

export interface Breakpoint {
  name: BreakpointName
  mobileBreakpoint: BreakpointName
}

datatableのpropsを例に説明

どうやら下記の様に利用されるらしい。
defaultでは600が入っているが自由に変更できるとのこと。

<v-data-table
  :headers="headers"
  :items="desserts"
  :items-per-page="5"
  class="elevation-1"
  mobile-breakpoint="500"
/>

VuetifyのmobileBreakpointが利用されているソース

また、mobileBreakpointがnumberだけならBreakpointNameで統一せずに分けろよな!!
と思ったがmobileBreakpointmにlgのようstringを使うコードも一応存在するみたい。

breakpoint.nameにnumber入れてるコードあるかな?

ということでVuetifyのbreakpointのテストコードを拝見
https://github.com/vuetifyjs/vuetify/blob/master/packages/vuetify/src/services/breakpoint/__tests__/breakpoint.spec.ts

number入れてるテスト無いじゃん!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0