如何访问默认的不存在的对象属性?
在此示例中,打字稿抱怨fooBar[foo]
-
Element implicitly has an 'any' type because expression of type '"fooBar"' can't be used to index type '{ readonly foo: "bar"; readonly bar: "foo"; }'.
Property 'fooBar' does not exist on type '{ readonly foo: "bar"; readonly bar: "foo"; }'
实现此功能的打字稿方式是什么?
const fooBar = {
foo: 'bar',
bar: 'foo'
} as const
const foo: 'foo' | 'fooBar' = 'fooBar';
const op: 'foo' | "bar" | 'default' = fooBar[foo] || 'default';
答案 0 :(得分:0)
foo
的值为“ foo”或“ fooBar”,因此当您说fooBar[foo]
时,编译器会抱怨,因为“ fooBar”不在keyof typeof fooBar
中。
使编译器停止抱怨的唯一方法是像这样撒谎:
type FooBar = typeof fooBar
const op: FooBar[keyof FooBar] | 'default' =
fooBar[foo as keyof FooBar] || 'default';
同样,这是一个谎言,因为在您的情况下,您知道foo
是“ foo”或“ fooBar”,并且您知道“ fooBar”不是fooBar
中的键之一。