타이프스크립트:TS7006: 파라미터 'xx'에는 암묵적으로 '임의' 유형이 있습니다.
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,
user
});
}
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
file 파라미터 설정"noImplicitAny": false
아래compilerOptions
이 에러를 없애겠습니다.
에서 다음 변경을 실시합니다.compilerOptions
의 단면tsconfig.json
이것은 나에게 효과가 있었다.
"noImplicitAny": false
설정할 필요가 없음
"strict":false
그리고 컴파일이 너무 느리니까 1~2분만 기다려주세요.
파라미터 'element'에 암묵적으로 'any' 타입이 있어 에러가 발생하는 경우.vueJs의 Vetur(7006)
다음 오류와 함께:
exportColumns.forEach(element=> {
if (element.command !== undefined) {
let d = element.command.findIndex(x => x.name === "destroy");
변수를 다음과 같이 정의하여 수정할 수 있습니다.
수정된 코드:
exportColumns.forEach((element: any) => {
if (element.command !== undefined) {
let d = element.command.findIndex((x: any) => x.name === "destroy");
Angular to function arguments에서 이 문제를 발견했습니다.
내 코드 오류 발생 전
매개 변수 'event'에 암시적으로 '임의' 유형이 있습니다.
여기 코드가 있습니다.
changeInpValue(event)
{
this.inp = event.target.value;
}
여기 변경 사항이 있습니다. 인수 작성 후: any
그러면 오류가 해결됩니다.
changeInpValue(event : any)
{
this.inp = event.target.value;
}
난 잘 지내고 있어.
이 오류는 tsconfig.json 파일에서 "strict" 파라미터가 true로 설정되어 있기 때문에 발생합니다.그냥 "거짓"으로 설정하세요(분명히.제 경우 cmd 프롬프트에서 tsconfig 파일을 생성했는데 파일 아래쪽에 있는 "strict" 파라미터를 놓쳤을 뿐입니다.
최소한의 오류 재현
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
The simplest way for your case is to use
--resolveJsonModule
compiler option:
import users from "./data.json" // `import` instead of `require`
const foundUser = users.find(user => user.id === 42); // user is strongly typed, no `any`!
스태틱 JSON Import 이외의 다른 케이스도 있습니다.
옵션 1: 명시적 사용자 유형(심플, 체크 없음)
type User = { id: number; name: string /* and others */ }
const foundUser = users.find((user: User) => user.id === 42)
옵션 2: 타입 가드(중간)
타입 가드 are a good middleground between simplicity and strong types: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)
}
You can even switch to
어설션 함수 (TS 3.7+) to get rid of
if
and throw an error instead.
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: 런타임 타입의 시스템 라이브러리(고급)
런타임 타입 체크라이브러리와 같은, 또는 보다 복잡한 케이스에 대해서 통합할 수 있습니다.
권장되지 않는 솔루션
noImplicitAny: false
undermines many useful checks of the type system:
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으로 이동하여 //comments:true 이것은 나에게 효과가 있었다.
파라미터 'post'는 Angularcli에 암묵적으로 'any' 타입이 있습니다.프로젝트 작성 시 앱에서 Angular의 엄밀한 모드를 유효하게 했을 가능성이 있습니까?Max는 strict 모드를 비활성화할 것을 권장합니다. strict 모드를 활성화한 경우 tsconfig.json의 strict 속성을 false로 설정하여 이 과정에 대해 비활성화하십시오.
사용자 유형을 선언하려고 합니다.예를 들어
let user:Object = {sample object}
이 메티드를 따라가.~하듯이
let var:type = val
내 경우:
export default function ({user, path}) {
return (
//...
)
}
로 바꿨습니다.
export default function ({user, path} : {
user: string
path: string
}) {
return (
//...
)
}
파일에 tsconfig.json 。"strict": false /* does not allow all strict type-checking options. */,
더하면 돼요."checkJs": false
jsconfig.json
언급URL : https://stackoverflow.com/questions/43064221/typescript-ts7006-parameter-xxx-implicitly-has-an-any-type
'prosource' 카테고리의 다른 글
Python 3에서 JSON 파일 읽기 (0) | 2023.02.27 |
---|---|
Windows의 JSON 에디터에 대한 권장 사항 (0) | 2023.02.27 |
투고 맵핑스프링 부트 시 휴지 상태에서의 GIS 지오메트리 포인트 필드 (0) | 2023.02.27 |
spring-data-rest 통합 테스트가 simple json 요청으로 실패함 (0) | 2023.02.27 |
WordPress의 모든 투고를 특집 이미지로 가져오려면 어떻게 해야 합니까? (0) | 2023.02.27 |