programing

산술 연산의 왼쪽과 오른쪽은 'any', 'number' 또는 열거형이어야 합니다.

javamemo 2023. 9. 27. 16:47
반응형

산술 연산의 왼쪽과 오른쪽은 'any', 'number' 또는 열거형이어야 합니다.

저는 다음과 같은 오류가 발생하고 있습니다.제가 정확히 어디가 잘못되었는지 알 수가 없습니다.누가 해결책 좀 도와줄 수 있습니까?

enter image description here

코드를

 function() {
    this.devices.forEach(device => {
      let lastConnect = device.lastConnection.split('+');
      lastConnect = lastConnect[0] + 'Z';
      let diff = Math.abs(new Date() - new Date(lastConnect));//getting error here
}

저는 그 문제를 알아냈습니다.

작성하신 코드는 자바스크립트에서만 동작합니다.

Math.abs(new Date() - new Date(lastConnect)) .

Typescript에서 작동하려면 아래와 같이 코드를 업데이트합니다.

Math.abs(new Date().getTime() - new Date(lastConnect).getTime());

말할 것도 없이, 당신의 코드는 자바스크립트에서 정확하게 작동합니다. 타이프스크립트에서 같은 결과를 얻고 싶다면, 당신은 3가지 옵션이 있습니다.

(1) - 의 도움으로valueOf

let diff = Math.abs(new Date().valueOf() - new Date(lastConnect).valueOf());

(2) - 의 도움으로getTime

let diff = Math.abs(new Date().getTime() - new Date(lastConnect).getTime());
// or
let diff = new Date().getTime() - new Date(lastConnect).getTime();

(3) - 의 도움으로any

let diff = Math.abs(<any>new Date() - <any>new Date(lastConnect))

가장 간단한 대답은

Math.abs(<any>new Date() - <any>new Date(lastConnect));

필요 없음Math.abs()이 질문에 대한 답을 하자면...

그냥 사용.getTime()메서드는 날짜를 숫자(Date.prototype.getTime())로 변환하므로 오류 없이 작업을 수행할 수 있습니다.

이 예제를 확인합니다.

또 다른 좋은 방법:

Math.abs((new Date() as any) - (new Date(lastConnect) as any));

타이프스크립트는 암묵적 변환에 문제가 있는 것 같으므로, 우리는 단지 그것들을 명시적으로 만들 수 있습니다.

Math.abs(+new Date() - +new Date(lastConnect));

참고로 괄호는 필요 없습니다. 왜냐하면,new연산자 바인딩이 (단일)보다 더 엄격합니다.+교환입니다.결국.(+new)말이 안 돼요. 그.+후에-필요하기도 합니다.

사용합니다.any기본적으로 형식 검사를 비활성화하기 때문에 최후의 수단으로만 사용할 수 있습니다.

타이프스크립트를 만족시키기 위해 코드 조각을 너무 많이 수정하는 것은 잘못된 가정으로 인해 오류가 발생할 수 있기 때문에 항상 안전하지는 않습니다.이것은 특히 오래된 .js 파일을 .ts 파일로 변환하기로 결정할 때 발생합니다.일반적으로 암묵적 전환을 명시적으로 하는 것이 가장 안전한 접근법이라고 생각합니다.

저도 같은 문제가 있습니다.*ngIf="event && +event.enableSomething", 가끔 받는 것처럼"0"데이터 파싱이 필요하지만 이벤트 인터페이스가 생성되었습니다.enableSomething: boolean그래서 그 경우에 저는 그 실수를 만회하고 있었습니다.

이 문제를 해결하려면 백엔드가 부울을 반환하고 종료해야 합니다.enableSomething: boolean인터페이스에서 또는 인터페이스를 에 수정합니다.enableSomething: any

제 쪽과 같은 문제를 가진 사람에게 도움이 되었으면 좋겠습니다.

나의 경우에는 다음과 같이 덧붙입니다..valueOf()투입후에Math.abs()

Math.round(valA.valueOf() / 20)

문서에 따르면:

valueOf()메서드는 지정한 개체의 프리미티브 값을 반환합니다.

언급URL : https://stackoverflow.com/questions/48274028/the-left-hand-and-right-hand-side-of-an-arithmetic-operation-must-be-of-type-a

반응형