Chr*_*man 14 typescript svelte
Svelte最终输出本机JavaScript类.因此,TypeScript可以理解这些.但是,Svelte组件必须首先从其初始.html
形式进行编译.在此之前,可以理解的是,默认情况下,TypeScript不会以初始形式理解它们.因此,即使在运行时导入成功,它也会报告"无法找到模块"错误.有没有办法让TypeScript理解它们?
一种解决方法是为.html
模块提供类型定义,近似于标准的Svelte组件接口.然而,更希望简单地将真实的组件类输出本身用于每个单独的组件,从而产生最准确的类型信息.
顺便说一句,我没有提到像Webpack或Rollup这样的工具,它们通常会为Svelte执行编译步骤.我不知道这些工具是否与这个问题有关.
更新1:我进一步了解了TypeScript,似乎可以为它创建插件.但是,它们似乎有限,所以可能没用.
Sco*_*eke 13
是的.使用rollup-plugin-svelte和rollup-plugin-typescript,它应该可以工作.我现在在汇总文件中使用它,如下所示:
import commonjs from 'rollup-plugin-commonjs'
import replace from 'rollup-plugin-replace'
import resolve from 'rollup-plugin-node-resolve'
import svelte from 'rollup-plugin-svelte'
import typescript from 'rollup-plugin-typescript'
const path = require('path')
const fs = require('fs')
export default {
input: 'src/index.ts',
plugins: [
typescript(),
commonjs({
include: 'node_modules/**'
}),
resolve({
browser: true,
preferBuiltins: false // for url npm module; otherwise rollup assumes node
}),
// Replace is to shut up redux
replace({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
}),
svelte({
// By default, all .html and .svelte files are compiled
extensions: ['.my-custom-extension', '.html', '.svelte'],
// You can restrict which files are compiled
// using `include` and `exclude`
// include: 'src/components/**/*.html',
// By default, the client-side compiler is used. You
// can also use the server-side rendering compiler
// generate: 'ssr',
// Extract CSS into a separate file (recommended).
css: function (css) {
fs.writeFileSync('./dist/svelte.css', css)
}
})
],
output: {
format: 'iife',
file: path.join(__dirname, './dist/index_dist.js') // equivalent to --output
}
}
Run Code Online (Sandbox Code Playgroud)