【发布时间】:2021-08-05 06:03:48
【问题描述】:
我使用 Vue 和 Typescript 4.2.4 开发了一个应用程序。我不能在函数中使用可选参数。埃斯林特没有抱怨。我的代码在 TS Playground 上也能正常工作。这是一个示例:
const f = (a: object, b?: object): void => {
console.log(a);
if (b) {
console.log(b);
}
}
f({ lorem: 'ipsum' });
f({ foo: 'bar' }, { optional: 'test' });
每次我想编译我都会得到
TS2554: Expected 2 arguments, but got 1.
在第一次通话中。
是否有一些配置可以启用或我应该做的其他事情?我没有使用 Typescript 的经验。感谢您的帮助。
Laravel 组合:
const mix = require('laravel-mix');
const config = require('./webpack.config');
mix
.webpackConfig(config)
.setResourceRoot(config.output.publicPath)
.disableNotifications()
.ts('resources/assets/js/app.ts', 'public/js').vue().extract()
.sass('resources/assets/sass/app.scss', 'public/css').sourceMaps()
.copyDirectory('node_modules/layout/images/', 'public/images')
.copyDirectory('node_modules/layout/icons/', 'public/icons')
.version();
用于混合的 Webpack 配置
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const path = require('path');
module.exports = {
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: { esModule: true },
},
{
test: /\.ts$/,
exclude: /node_modules/,
loader: 'ts-loader',
options: { appendTsSuffixTo: [/\.vue$/] },
},
],
},
output: {
publicPath: `/${process.env.APP_ALIAS}/` || '/',
chunkFilename: 'chunks/[name].js?id=[chunkhash]',
},
plugins: [
new CleanWebpackPlugin({
cleanOnceBeforeBuildPatterns: ['**/*', '!.htaccess', '!index.php', '!robots.txt'],
}),
],
resolve: {
alias: {
'@': path.resolve('resources/assets/js'),
},
},
};
tsconfig
{
"compilerOptions": {
"target": "es2015",
"module": "esnext",
"moduleResolution": "node",
"allowSyntheticDefaultImports": true,
"strict": true,
"strictNullChecks": true,
"strictPropertyInitialization": true,
"noImplicitAny": false,
"noImplicitReturns": false,
"noImplicitThis": false,
"noUnusedLocals": true,
"importHelpers": true,
"skipLibCheck": true,
"allowUnusedLabels": false,
"sourceMap": true,
"esModuleInterop": true,
"allowJs": true,
"baseUrl": ".",
"paths": {
"@/*": ["resources/assets/js/*"],
},
"lib": ["esnext", "dom"]
},
"include": [
"resources/assets/js/**/*"
],
"exclude": [
"node_modules",
]
}
编辑:
好的,我想我的 Laravel 项目中的 Typescript 不能正常工作。当我将配置更改为:
"noImplicitAny": true,
"noImplicitReturns": true,
我的游乐场代码导致另一个错误:
./resources/assets/js/app.ts 6:11-12
[tsl] ERROR in D:\Dev\Laravel\processes\resources\assets\js\app.ts(6,12)
TS7006: Parameter 'a' implicitly has an 'any' type.
ERROR in D:\Dev\Laravel\processes\resources\assets\js\app.ts
./resources/assets/js/app.ts 6:14-15
[tsl] ERROR in D:\Dev\Laravel\processes\resources\assets\js\app.ts(6,15)
TS7006: Parameter 'b' implicitly has an 'any' type.
ERROR in D:\Dev\Laravel\processes\resources\assets\js\app.ts
./resources/assets/js/app.ts 12:0-21
[tsl] ERROR in D:\Dev\Laravel\processes\resources\assets\js\app.ts(12,1)
TS2554: Expected 2 arguments, but got 1.
如您所见,函数和参数定义了它们的类型。 那里有什么问题?
【问题讨论】:
-
我怀疑您编译的版本与您的编辑器使用的版本不同。
-
感谢您的回答。这是一个 Laravel 项目,我在其中使用 Vue 和 TS。 node_modules 中只有一个版本的 TS。我使用 Laravel Mix(webpack 包装器)来编译我的应用程序。
-
难道 TS 也是全局安装的,编译使用的是那个版本的 TSC?如果没有,最好在编译过程中包含更多细节——正如你提到的 webpack。
-
是的,我还检查了 npm 全局包。没有全局 Typescript。 Webpack 只抛出我在上面写的消息。
-
你能发布你的 webpack 配置文件吗?
标签: laravel typescript