javascript - 期望 typescript tsc 抛出错误,但没有抛出任何错误
问题描述
在用于编辑打字稿代码的 IDE 中,checkApp.ts 中有一条警告,说明:
Argument type { someWrongParams: any } is not assignable to parameter type AddAppToListParams.
但是,当我运行时tsc
,不会抛出任何错误。如何在运行时显示错误tsc
。
tsconfig.json
{
"compilerOptions": {
"allowJs": true,
"noEmit": true,
"pretty": true,
"strict": true,
"strictFunctionTypes": true,
"noImplicitReturns": true,
"module": "ES6",
"target": "ES6"
},
"exclude": [
"node_modules",
"dist"
],
"include": [
"./src/**/*"
]}
代码 checkApp.ts
interface CheckAppParams {
appId: string;
}
export default (app: any) => async (requestParams: CheckAppParams): Promise<any> => {
const { appId } = requestParams;
await app.tasks.addAppToList({ someWrongParams: appId });
};
addAppToList.ts
interface AddAppToListParams {
appId: string;
}
export default (app: any) => async (requestParams: AddAppToListParams): Promise<any> => {
const { appId } = requestParams;
app.list.push(appId);
};
任务.ts
import checkApp from './checkApp';
import addAppToList from './addAppToList';
export default (app: any) => async (): Promise<any> => {
app.tasks = {
addAppToList: addAppToList(app),
checkApp: checkApp(app),
};
};
解决方案
编译问题中显示的代码tsc
时不报告错误是正确的。你的期望是不正确的。
在checkApp.ts
您将导出函数的参数显式定义为(app: any)
. 因此,在函数内部,app.tasks
也是类型any
,app.tasks.addAppToList
也是类型any
,编译器会让你对它做任何你想做的事情。当你这样做时,编译器没有理由给出错误app.tasks.addAppToList({ someWrongParams: appId });
。
至于为什么您的 IDE 标记错误,问题中没有足够的信息来解释这一点。也许您以不保留关键信息的方式修改了粘贴到此处的代码。也许您的 IDE 正在运行的文件与您传递给编译器的文件不同。(我想说它从来没有发生在我身上,但有时在大型重构中,我会分心,失去对情节的追踪,并设法让我的电线交叉了一点。)实际上,你显示的错误消息确实暗示您的 IDE 正在使用的代码与您在问题中显示的代码之间的区别。问题中的代码传递了一个类型的参数:{ someWrongParams: string }
但是来自 IDE 的错误消息抱怨一个类型的参数{ someWrongParams: any }
。
推荐阅读
- c# - XUnit - 用于将可重用测试助手放置在具有扩展方法的外部共享类库中的设计架构
- regex - Groovy - 如何用正则表达式替换字符串中的元素
- perl - 如何在 Perl 中设置硬最大递归深度?
- xml - Ionic 3 项目没有 config.xml
- r - 如何在 R 中为特定数据项的均值、SD 和范围创建表?
- java - 无法将 JPA 依赖项添加到 spring-boot 项目中
- c++ - g++ 命令 synatx 有什么问题?
- bash - 仅当表达式存在时 Sed 才替换子字符串
- google-sheets - 问:谷歌表格 - 插入列后静态单元格引用发生变化
- php - 无法从 archive.php 中调用的函数获取 get_queried_object()