TypeScript ფუნქციიდან დაბრუნებული 'სტრინგი'


მიდის ფუნქცია translateNumericDayToString, რომელიც აბრუნებს სტრინგს დღის სახელით (მაგალითად "monday"):

export function translateNumericDayToString(day: number) {
  const days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
  return days[day];
}

მე მაქვს json ტიპი და შემდეგი კოდი:

type days = {
  sunday: {
    ...
  },
  monday: {
    ...
  },
}

currentDayIndex = 1
const currentDay: keyof typeof days = translateNumericDayToString(currentDayIndex);

მეც ს reciben Type 'string' არ შეიძლება დაინიშნოს ტიპზე '"monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday"'

როდესაც მე ვუკეთებ ცვლილებას const currentDay: keyof typeof days="monday" ის მუშაობს როგორც მოსალოდნელი იყო.

რატომ? რა არის ამის სწორ გზა?

პასუხი #1

გამოიყენეთ as const („const-ის განაჩენები“, დამატებული Typescript 3.4-ში). როგორც არის, Typescript ხედავს სტრინგების მასივს და მიიჩნევს, რომ მასივი ცვალებადია. as const-ის გამოყენებისას, Typescript სწორად ხვდება, რომ მასივი არის მუდმივ მნიშვნელობათა სია.

export function translateNumericDayToString(day: number) {
  const days = ['sunday', /*...*/ 'saturday'] as const;
                                           // ^^^^^^^^
  return days[day];
}

// return type is now "sunday" | /* ... */ | "saturday"

ტაიპსკრიპტის სავარჯიშო