はい、これは#10676に関連しています。 以前は、文字列リテラルは特定の「リテラルコンテキスト」(型アサーションの後など)でのみリテラル型を持ち、式の正確な型をオブジェクトリテラルプロパティの推定型として使用していました。 現在、文字列リテラルには常にリテラルタイプがあり、代わりに、可変の場所(オブジェクトリテラルプロパティなど)が推測されるときにタイプを_拡張_します。 したがって、この例では、(a)文字列リテラルがすでにリテラル型であるため、および(b)型アサーションの後に式全体の結果を拡張するため、型アサーションは効果がありません。
下位互換性を高めるために、初期化式が型アサーションである場合、推論された型を拡張しないことを検討できます。 結局のところ、そうでなければ型アサーションのポイントは何でしょうか?
@ahejlsbergご
イニシャライザ式が型アサーションである場合に、推論された型を拡張しないことを検討できれば素晴らしいと思います-そして同意します-それは型アサーションのポイントの一種です:)
それなしで動作を停止する別の一般的なケースは次のとおりです。
function test(style: { align: 'left' | 'right', size: number }) {
}
const style = {
align: 'left' as 'left',
size: 5
}
test(style)
リテラルタイプの構文https://github.com/Microsoft/TypeScript/issues/10195が役立ち
どうもありがとう
@wallverb同意しました。型を明示的に指定せずに拡張したくないことを示すために、構文の_some_形式があると便利です。 ただし、下位互換性の理由から、型アサーションにその意味を持たせる必要があります。
最も参考になるコメント
@wallverb同意しました。型を明示的に指定せずに拡張したくないことを示すために、構文の_some_形式があると便利です。 ただし、下位互換性の理由から、型アサーションにその意味を持たせる必要があります。