weg*_*gry 1 structural-typing typescript
以下代码片段无法使用typescript@4.0.2.
const foo: unknown = {bar: 'baz'}
if (foo && typeof foo === 'object' && 'bar' in foo) {
console.log(foo.bar)
}
Run Code Online (Sandbox Code Playgroud)
tsc 错误是
Property 'bar' does not exist on type 'object'.
Run Code Online (Sandbox Code Playgroud)
如何确信tscfoo 可以拥有任意命名的键而无需显式强制转换?
类型unknown是类型安全的,因此解决此问题的一种方法是将对象强制转换foo为具有属性的any接口。bar
const foo: unknown = {bar: 'baz'};
console.log((foo as any).bar);
Run Code Online (Sandbox Code Playgroud)
或者,
const foo: unknown = {bar: 'baz'};
interface HasBar {
bar: string;
}
console.log((foo as HasBar).bar);
Run Code Online (Sandbox Code Playgroud)