23 lines
582 B
JavaScript
23 lines
582 B
JavaScript
![]() |
/** @flow */
|
||
|
|
||
|
/* This test documents an example we ran into of a type annotation leaking.
|
||
|
*
|
||
|
* When foo() calls bar(), we should make sure the type of x matches the type
|
||
|
* annotation for y and stop. We should type the body of bar() with the type
|
||
|
* annotation of y.
|
||
|
*
|
||
|
* However, the leaky type annotation meant that we were flowing x's type to y
|
||
|
* and type checking the body of bar() using the stricter dictionary type,
|
||
|
* leading to an error.
|
||
|
*/
|
||
|
|
||
|
type MyObj = Object;
|
||
|
|
||
|
function foo(x: {[key: string]: mixed}) {
|
||
|
bar(x);
|
||
|
}
|
||
|
|
||
|
function bar(y: MyObj): string {
|
||
|
return y.foo;
|
||
|
}
|