2015-05-02 2 views
26

docs говорят:В чем разница между `mixed` и` any`?

  • mixed: в "супертип" всех типов. Любой тип может втекать в mixed.
  • any: «динамический» тип. Любой тип может течь в any, и наоборот

Что бы быть случай, когда mixed и any не могут быть использованы как взаимозаменяемые?

+0

Ссылка на документацию не работает, и [текущие документы на 'mixed'] (https://flow.org/en/docs/types/mixed/) не имеют такого текста. Это то, что выглядела эта страница документов, когда она существовала: https://web.archive.org/web/20150513033813/http://flowtype.org/docs/base-types.html –

ответ

18

Разница в обратном: 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.

+0

Ах, вам нужно сделать 'looselyTyped = someType; numeric = looselyTyped; ':-) – Bergi

15

«Любой» поддерживает ковариацию и контравариантность. Это потому, что «любой» является супертипом и подтипом всех типов.

Следовательно, это работает,

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. 

ковариация - Generic типа (родитель) может быть заменена специальным типом (ребенок)

контравариации - Специальный тип (ребенок) может быть замещен родовым типом (родительский). Это проблема, если она не защищена определенными соглашениями.

Смежные вопросы