It’s because you’re typing (not typing) it as the generic type of string keys against a Book.
Before you add the type annotation, the type solver infers it as:
local Books: {
WarAndPeace: {
Name: "War And Peace",
Length: number
},
--etc. with "TheGruffalo"
}
but when you add [string]: Book, you’re overriding that implicit type definition and saying that any string can be the key - not just the names of the books. This causes the type solver to expect absolutely any valid string as the key - not just the book names, hence why autocomplete doesn’t show after you add this annotation.