typescript - Argument av typen 'number' kan inte tilldelas parametern av typen 'string' när man använder parseFloat


Jag får ett Argument of type 'number' is not assignable... fel när jag använder parseFloat i min kod. Jag har försökt att typa differenceBetweenDates som string | number och som any, samt unitDateValue som string | number och any, men felet kvarstår.

Det är särskilt förvirrande, eftersom felet säger att det inte går att tilldela, och ger mig variabeln differenceBetweenDates, när jag inte sätter variabeln i koden. differenceBetweenDates är understruken som ett fel, men jag tilldelar faktiskt unitDateValue;

Här är den funktion som avses:

export default function processDate(): void {
  let endDateValue: any = 10;
  let startDateValue: any = 20  
  let unitDateValue: any;
  let unit = 'day';  
  let differenceBetweenDates: any;

  // diff() will return a number
  differenceBetweenDates = endDateValue.diff(startDateValue);
  if(differenceBetweenDates > 0) {
    switch (unit) {
      case 'day': {

        // ERROR: Argument of type 'number' is not assignable to parameter of type 'string';
        // ERROR: let differenceBetweenDates: any;
        unitDateValue = parseFloat( differenceBetweenDates / (1000 * 60 * 60 * 24) ).toFixed(0);

        // This works but is not what I want, I need to parseFloat
        // unitDateValue = ( differenceBetweenDates / (1000 * 60 * 60 * 24) ).toFixed(0);
        break;
      }
      case 'week': {
        // ERROR: Argument of type 'number' is not assignable to parameter of type 'string';
        // ERROR: let differenceBetweenDates: any;
        unitDateValue = parseFloat( differenceBetweenDates / (1000 * 60 * 60 * 24 * 7) ).toFixed(1);
        //Round up on .9
        let unitDateValueArray = unitDateValue.split('.');
        if(unitDateValueArray.length === 2 && unitDateValueArray[1] === '9') {
          unitDateValue = Math.round( Number(unitDateValue) );
        }
        break;
      }
    }
    console.log( Number(unitDateValue).toString() );
  }

}

Svar #1

parseFloat accepterar bara strängar i sitt första parametrar. Det är felet.

Eftersom du redan har ett nummer där behöver du inte kalla parseFloat på det. Sätt det bara inom parentes och kalla .toFixed(1) på resultatet.

unitDateValue = (differenceBetweenDates / (1000 * 60 * 60 * 24)).toFixed(0);

Relaterade artiklar