[IMP] types: do not make Env an indexed type

Before this commit, Env was an indexed type, this means that one could
write env.anything, and it would accept it as a valid type. This is
actually quite dangerous, because we lose the typing advantages for all
keys that are properly defined.

For example, if a component is defined as:

class MyComponent extends Component<Props> {
 ...
}

Then Typescript will let it use anything from the environment, even if
it is wrong.  So, most properly typed Typescript applications should use
instead a sub environment:

interface MyAppEnv extends Env {
  someKey: someValue
}

Then, the component should be defined this way:

class MyComponent extends Component<Props, MyAppEnv> {
 ...
}

Before this commit, any typos in the environment accesses would not be
noticed by typescript.
This commit is contained in:
Géry Debongnie
2020-04-17 11:30:25 +02:00
committed by aab-odoo
parent 94c8bce810
commit 142b69823f
6 changed files with 26 additions and 11 deletions
-1
View File
@@ -34,7 +34,6 @@ import { activateSheet } from "./styles";
*/
export interface Env {
qweb: QWeb;
[key: string]: any;
}
export type MountPosition = "first-child" | "last-child" | "self";