I'm trying to create a dictionary data structure that contains several CustomType objects that can be associated with any string key.

I figured I could just use {[string]: CustomType} as my dictionary type, like this:

--!strict
type CustomType = {
	a: string,
	b: string
}

local dictionary: {[string]: CustomType} = {
	keyOne = { a = 'hello' }, -- should display type error
	keyTwo = { a = 'hello', b = 'world'} -- should be fine
}

However, in the code snippet above no type error is shown in the code editor even though the b field is missing from keyOne. However, if I explicitly define the keys in the dictionary type definition, then it works as expected:

--!strict
type CustomType = {
	a: string,
	b: string
}

local dictionary: {keyOne: CustomType, keyTwo: CustomType} = {
	keyOne = { a = 'hello' }, -- displays type error
	keyTwo = { a = 'hello', b = 'world'} -- is fine
}

Why is this? Is there a way for me to enforce typechecking for custom types inside a dictionary for ALL string keys instead of needing to explicitily define them in the type definition? Am I going about this the wrong way?

Any help would be greatly appreciated.