Ответ 1
В Q1 поместите код Typescript в отдельный файл script.ts
и включите его в App.vue
, например:
<script lang="ts">
import s from './script'
export default s
</script>
В Q2, как предложено @Oswaldo, вы можете определить файл vue.d.ts
, который имеет следующий контент:
declare module '*.vue' {
import Vue = require('vue')
const value: Vue.ComponentOptions<Vue>
export default value
}
Если вы поместите этот файл в папку ${Project_ROOT}/typings
, вам нужно включить этот файл типа в tsconfig.json
, например
"typeRoots": ["./typings"]
Затем вы можете импортировать файл *.vue
с postfix .vue
:
import App from './App.vue'
Если вам не нравится включать постфикс .vue
, вы можете поместить все компоненты Vue в одну папку, например src/components
, и изменить vue.d.ts
следующим образом:
declare module 'src/components/*' {
import Vue = require('vue')
const value: Vue.ComponentOptions<Vue>
export default value
}
src
определяется как webpack.base.conf.js
как псевдоним для абсолютного пути.
resolve: {
extensions: ['.js', '.vue', '.json', '.ts'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'src': resolve('src')
}
}
Затем вам нужно использовать полный путь для импорта компонента без посттекста .vue
:
import App from 'src/components/App'
Оба не являются элегантными решениями, но красное подчеркивание ушло.