は、活字体コンパイラはconstsのために、文字列リテラルの型を推論します:プロパティの文字列リテラル型を推論するためにTypescriptコンパイラにヒントを教えてください。
const a = 'abc';
const b: 'abc' = a; // okay, a is of type 'abc' rather than string
しかし、性質のために、型がstring
と推定されます。この例では
const x = {
y: 'def',
};
const z: { y: 'def' } = x; // error because x.y is of type string
、どのように私は、コンパイラがx
がx
のために型注釈を記述することなく、タイプ{ y: 'def' }
であることを推論するために得ることができますか?
編集:issueがこの機能のサポートをリクエストしています。一つの解決策としては、このような構文を使用することです:
const x = new class {
readonly y: 'def';
};
const z: { readonly y: 'def' } = x; // Works
は遊び場hereでそれを試してみてください。
編集2:この問題を解決するオープンPRもあります。型の拡大を無効にすることは一般的な要求のようです。
[type assertion](https://www.typescriptlang.org/docs/handbook/basic-types.html#type-assertions)で特定の型があることをコンパイラに伝えることができます: 'const x = { y: 'def' as 'def'、 }; ' – artem