mixed: "супертип" всех типов. Любой тип может втекать в mixed.
any: "динамический" тип. Любой тип может втекать в any и наоборот
Что будет в случае, если mixed и any нельзя использовать взаимозаменяемо?
Ответ 1
Разница заключается в "обратном": any может протекать в другие типы, но mixed не может.
/* @flow */
var numeric:number = 0;
var looselyTyped:any;
var someType:mixed;
numeric = looselyTyped;
numeric = someType; //only this will throw a flow check error
Из документов, с которыми вы связаны:
Стоит называть кого-то особенным из-за особой природы этой аннотации. Используйте любой, чтобы избежать статического ввода потока. Другими словами, если поток становится на вашем пути, и вы абсолютно уверены, что ваша программа правильная, вы можете отключить ошибки, аннотируя местоположения вдоль путей ошибок с типом any.
Ответ 2
"Любой" поддерживает ковариацию и контравариантность. Это потому, что "any" является супертипом и подтипом всех типов.
Следовательно, это работает,
let genericVariable: any = 20;
let numericVariable: number;
genericVariable = numericVariable; // No error
numericVariable = genericVariable; // No error
смешанная поддерживает только ковариацию. Это супер-тип и не подтип всех типов.
let genericVariable: mixed = 20;
let numericVariable: number;
numericVariable = genericVariable; // This shows error
genericVariable = numericVariable; // This works fine.
Ковариация - общий тип (родительский) может быть заменен специальным типом (дочерним)
Контравариантность - специальный тип (дочерний) может быть заменен родовым типом (родителем). Это проблема, если она не защищена определенными соглашениями.