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"
ტაიპსკრიპტის სავარჯიშო
