Thesis Statement: JavaScript programs use prototype-based objects, flow-based type reasoning and other techniques that confound existing type systems. We can design a practical type system that admits the features and idioms of third- party JavaScript programs that were not written with a type-checker in mind. We can integrate a type system with dataflow analysis in a principled manner to account for flow-based type reasoning.