I see that most issues are related to backwards compatibility and not confusing users.
But I don't quite understand what you mean by the benefits of strict data typing.
I look at the code in TweenLite.js:
var Animation = _class("core.Animation", function(duration, vars) {
this.vars = vars = vars || {};
this._duration = this._totalDuration = duration || 0;
this._delay = Number(vars.delay) || 0;
Type conversion is done for delay, but not for duration. I think there is as many reasons to do type conversion for duration as for vars.delay. Correct me if I'm wrong, but you can run
TweenLite.to(elm, '3.545')
and it will run totally fine, hurting performance. This may pass unnoticed in cases when duration is deducted from dom attributes, which are strings.
I think the major problem about this param is that if a user likes to make a config and apply it he has to do it like this:
var tween = {
duration: 1,
vars: {
ease: ease
}
};
....
TweenLite.to(elm, tween.duration, tween.vars);
// Instead of much cleaner
TweenLite.to(elm, tween);
I think I end up making a wrapper like
function TweenLiteV2(config) {
return TweenLite.to(config.elm, config.duration, config.tween);
}