generated at
TypeScript string型をliteral型だと気づかせる
as を使えば気づかせられる
ts
function iTakeFoo(foo: 'foo') { } const test = { someProp: 'foo' }; iTakeFoo(test.someProp); // Error: Argument of type string is not assignable to parameter of type 'foo'
literal に対応する文字列を普通に渡しても、 string 型だから違うよとエラーが出るので
as
function iTakeFoo(foo: 'foo') { } const test = { someProp: 'foo' as 'foo' }; iTakeFoo(test.someProp); // Okay!
as を使って気づかせる
もしくは、型アノテーションを使う
ts
function iTakeFoo(foo: 'foo') { } type Test = { someProp: 'foo', } const test: Test = { // Annotate - inferred someProp is always === 'foo' someProp: 'foo' }; iTakeFoo(test.someProp); // Okay!

as const を使うと更に楽だと教えてもらった
ts
function iTakeFoo(foo: 'foo') { } const test = { someProp: 'foo' } as const; iTakeFoo(test.someProp); // Okay!