![]() |
玩足球的烈马 · 湾沚区国民经济和社会发展第十四个五年规划和2 ...· 3 月前 · |
![]() |
豁达的生姜 · 十、人口和就业(24) - 国家统计局· 8 月前 · |
![]() |
愤怒的伤疤 · 【推文】本能游戏 by ...· 9 月前 · |
![]() |
儒雅的菠萝 · “李四光大讲堂”开讲 ...· 9 月前 · |
![]() |
忐忑的拖把 · 消失的游戏主播:身价暴跌、还债、退圈、翻红难 ...· 1 年前 · |
在测试我的UserRouter时,我使用了一个json文件
data.json
[
"id": 1,
"name": "Luke Cage",
"aliases": ["Carl Lucas", "Power Man", "Mr. Bulletproof", "Hero for Hire"],
"occupation": "bartender",
"gender": "male",
"height": {
"ft": 6,
"in": 3
"hair": "bald",
"eyes": "brown",
"powers": [
"strength",
"durability",
"healing"
]
构建我的应用程序时,我会得到以下TS错误
ERROR in ...../UserRouter.ts
(30,27): error TS7006: Parameter 'user' implicitly has an 'any' type.
UserRouter.ts
import {Router, Request, Response, NextFunction} from 'express';
const Users = require('../data');
export class UserRouter {
router: Router;
constructor() {
* GET one User by id
public getOne(req: Request, res: Response, _next: NextFunction) {
let query = parseInt(req.params.id);
/*[30]->*/let user = Users.find(user => user.id === query);
if (user) {
res.status(200)
.send({
message: 'Success',
status: res.status,
else {
res.status(404)
.send({
message: 'No User found with the given id.',
status: res.status
const userRouter = new UserRouter().router;
export default userRouter;
您使用的是
--noImplicitAny
,而TypeScript不知道
Users
对象的类型。在这种情况下,您需要显式地定义
user
类型。
更改这一行:
let user = Users.find(user => user.id === query);
对此:
let user = Users.find((user: any) => user.id === query);
// use "any" or some other interface to type this argument
或者定义
Users
对象的类型:
//...
interface User {
id: number;
name: string;
aliases: string[];
occupation: string;
gender: string;
height: {ft: number; in: number;}
hair: string;
eyes: string;
powers: string[]
//...
const Users = <User[]>require('../data');
//...
我输入了这个错误,发现这是因为“严格”参数在tsconfig.json文件中被设置为true。把它设为“假”(很明显)。在我的例子中,我从cmd提示符中生成了tsconfig文件,而忽略了“严格”参数,该参数位于文件的更下面。
在
tsconfig.json
文件中,在
compilerOptions
下设置参数
"noImplicitAny": false
以消除此错误。
如果您得到一个错误作为 参数‘元素’隐式有一个'any‘type.Vetur(7006) 在 vueJs 中
有错误:
exportColumns.forEach(element=> {
if (element.command !== undefined) {
let d = element.command.findIndex(x => x.name === "destroy");
您可以通过定义thoes变量来修复它,如下所示。
修正代码:
exportColumns.forEach((element: any) => {
if (element.command !== undefined) {
let d = element.command.findIndex((x: any) => x.name === "destroy");
最小误差再现
export const users = require('../data'); // presumes @types/node are installed
const foundUser = users.find(user => user.id === 42);
// error: Parameter 'user' implicitly has an 'any' type.ts(7006)
推荐解决方案:
--resolveJsonModule
对于您的情况,最简单的方法是使用
--resolveJsonModule
编译器选项:
import users from "./data.json" // `import` instead of `require`
const foundUser = users.find(user => user.id === 42); // user is strongly typed, no `any`!
除了静态JSON导入之外,还有其他一些替代方案。
选项1:显式用户类型(简单,不检查)
type User = { id: number; name: string /* and others */ }
const foundUser = users.find((user: User) => user.id === 42)
备选方案2:类型警卫(中间地带)
型护罩 是简单和强类型之间的一个很好的中间点:
function isUserArray(maybeUserArr: any): maybeUserArr is Array<User> {
return Array.isArray(maybeUserArr) && maybeUserArr.every(isUser)
function isUser(user: any): user is User {
return "id" in user && "name" in user
if (isUserArray(users)) {
const foundUser = users.find((user) => user.id === 42)
}
您甚至可以切换到
断言函数
(TS 3.7+)以摆脱
if
并抛出一个错误。
function assertIsUserArray(maybeUserArr: any): asserts maybeUserArr is Array<User> {
if(!isUserArray(maybeUserArr)) throw Error("wrong json type")
assertIsUserArray(users)
const foundUser = users.find((user) => user.id === 42) // works
选项3:运行时类型的系统库(复杂)
对于更复杂的情况,可以集成运行时类型检查库(如
io-ts
或
ts-runtime
)。
而不是 推荐的解决方案
noImplicitAny: false
破坏了对类型系统的许多有用的检查:
function add(s1, s2) { // s1,s2 implicitely get `any` type
return s1 * s2 // `any` type allows string multiplication and all sorts of types :(
add("foo", 42)
另外,最好为
User
提供一个显式的
user
类型。这将避免将
any
传播到内部层类型。相反,输入和验证保留在外部API层的JSON处理代码中。
转到tsconfig.json并注释这一行//严格:真这样对我有用
在tsconfig.json文件中添加以下规则:-
"strict": false /* does not allow all strict type-checking options. */,
参数'post‘隐式地在Angularcli中有一个’任意‘类型的 ,也许在项目创建时,您已经在应用程序中启用了Angular的严格模式?如果已启用 严格模式 ,则Max建议禁用严格模式,请在本课程中将tsconfig.json中的严格属性设置为 false ,从而禁用它。
在您的
compilerOptions
部分的
tsconfig.json
文件中进行这些更改--这对我来说是有效的
"noImplicitAny": false
不需要设置
"strict":false
请稍等1到2分钟,一些pcs机的编译速度很慢
我发现这个问题与函数的论点成角。
在我的代码出现错误之前
参数'event‘隐式具有’任意‘类型。
这是代码
changeInpValue(event)
this.inp = event.target.value;
}
下面是更改,在参数写入
: any
并解决错误后
changeInpValue(event : any)
this.inp = event.target.value;
}
为我工作得很好。
尝试声明用户类型。比如
let user:Object = {sample object}
跟着这个方法。作为
let var:type = val
![]() |
豁达的生姜 · 十、人口和就业(24) - 国家统计局 8 月前 |