gpt4 book ai didi

typescript - TypeScript 能理解 Svelte 组件吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:33:11 26 4
gpt4 key购买 nike

Svelte 最终输出原生 JavaScript 类。所以,TypeScript 可以理解这些。但是,Svelte 组件必须首先从其初始 .html 形式进行编译。在那之前,可以理解的是,默认情况下 TypeScript 无法理解它们的初始形式。因此,即使在运行时导入成功,它也会报告“找不到模块”错误。有没有办法让 TypeScript 理解它们?

一种解决方法是为 .html 模块提供类型定义,接近标准的 Svelte 组件接口(interface)。然而,更理想的做法是简单地为每个单独的组件使用真实的组件类输出本身,从而产生最准确的类型信息。

顺便说一句,我没有提到像 Webpack 或 Rollup 这样的工具,它们可以正常执行 Svelte 的编译步骤。我不知道这些工具是否与这个问题相关。

更新 1: 我进一步研究了 TypeScript,它 seems that plugins can be created for it .但是,它们似乎是有限的,因此可能没有用。

更新 2:还有一些关于 TypeScript 中自定义模块加载器的讨论​​(herehere)。

最佳答案

。使用 rollup-plugin-svelterollup-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
}
}

关于typescript - TypeScript 能理解 Svelte 组件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48138940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com