Skip to content

Warn when props use externally imported types in <script setup> #1958

@varHarrie

Description

@varHarrie

Version

3.0.0-rc.7

Reproduction link

https://github.com/varHarrie/vue-script-setup-reproduction

Steps to reproduce

// ===== types.ts =====

export type ButtonSize = 'small' | 'medium' | 'large'
export type ButtonType = 'normal' | 'primary' | 'warn' | 'danger'

export interface ButtonProps {
  size: ButtonSize
  type: ButtonType
}

export type ButtonEvents = ["click"];

// ===== MyButton.vue =====

<template>
  <button :class="classes">
    <slot />
  </button>
</template>

<script lang="ts" setup="props, ctx">
import { ButtonProps, ButtonEvents } from './types'

declare const props: ButtonProps
declare const ctx: SetupContext<ButtonEvents>

export const classes = [
  props.size,
  props.type
]
</script>

// ===== App.vue =====

<template>
  <my-button size="large" type="danger" />
</template>

What is expected?

button has large and danger class names.

What is actually happening?

button has size and type attributes.


When I change declare const props: ButtonProps to declare const props: { size: string, type: string }, it works as expected.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions