棘手的"Type 'any' is not assignable to type 'never'"问题



我遇到了一个让我难倒的Typescript问题。

错误在下一行themeToChange[tileId][key] = value;

错误是比较经典的Type 'any' is not assignable to type 'never'.

该错误100%与TileLayout类型相关,因为它的引入导致了此错误。我看不出哪里出错了。如果我将值"None"添加到TileLayout类型,它就会解析。

const changeSetting = React.useCallback(
(key: keyof TileSettings, value: ValueOfTileSettings, tileId: TileId) => {
const userSettings = JSON.parse(JSON.stringify(settings)) as UserSettings;
const themeToChange = getCurrentTheme(userSettings, colorMode);
themeToChange[tileId][key] = value;
setSettings(userSettings);
},
[colorMode, setSettings, settings]
);

类型定义如下:


export type TileLayout = "STANDARD" | "COMPACT";
export type TileType =
| "Reddit Feed"
| "Hacker News Feed"
| "Strava Graph"
| "Search Bar"
| "Bonsai"
| "Small Weather Tile"
| "Large Weather Tile"
| "UV Graph"
| "Day Planner"
| "Theme Picker"
| "Small Spotify Tile"
| "Time"
| "Twitter Feed Tile"
| "Markdown File Tile"
| "Todo List"
| "Large Spotify Tile"
| "Small Stock Tile"
| "Large Stock Tile"
| "Spotify Top Artist Tile"
| "Blank Tile"
| "Favorite Links Tile"
| "RSS Feed Tile"
| "None";
export type TileSettings = {
textColor: string;
backgroundColor: string;
tileType: TileType;
tileLayout?: TileLayout;
themePickerBubbleColor?: string;
sidebarBackgroundColor?: string;
sidebarBorderColor?: string;
subTextColor?: string;
subReddit?: string;
twitterFeedURL?: string;
stravaToken?: string;
dropShadow?: string;
cityForWeather?: string;
cityForUv?: string;
todoList?: TodoObject[];
tileBorder?: string;
stockName?: string;
bonsaiBaseColor?: string;
bonsaiTrunkColor?: string;
borderRadius?: string;
borderColor?: string;
gridGap?: string;
tempDisplayInCelsius?: string;
hackerNewsFeedType?: string;
spotifyArtistSearchTimeLength?: string;
bookings?: Booking[];
markdownFileText?: string;
favoriteLinks?: FavoriteLink[];
rssFeeds?: RSSFeed[];
};
export type ThemeSettings = {
themeName: string;
downloadedFromMarketplace: boolean;
globalSettings: TileSettings;
tile1: TileSettings;
tile2: TileSettings;
tile3: TileSettings;
tile4: TileSettings;
tile5: TileSettings;
tile6: TileSettings;
tile7: TileSettings;
tile8: TileSettings;
tile9: TileSettings;
tile10: TileSettings;
tile11: TileSettings;
};

任何帮助我将非常感激!:)

提取泛型键,用于value的类型推断。<K extends keyof TileSettings>(key: K, value: TileSettings[K], tileId: TileId)

相关内容

最新更新