类型推断支持Javascript

时间:2017-11-09 15:28:01

标签: javascript typescript type-inference

我尝试使用Compiler API来处理JavaScript代码,并使用Type inference来预测'object.property'PropertyAccessExpression节点中的'object'类型。 像第一个样本打击的简单工作正常,但大多数示例失败,想知道这是否是使用TypeScript类型推断的有意方式,或者因为我没有编写正确的代码?谢谢!

var obj={prop: ''};
var h=obj;
h.prop = ''; //works! 'h' show as 'obj' type

function fx(arg) {return arg;}
var i=fx(obj);
i.prop = ''; //failed! type of 'i' show 'any', it should be 'obj'

以下是使用checker打印推断类型的源代码:

var ts = require('typescript');
function visit(node) {
    ts.forEachChild(node, visit);
    console.log( checker.getSymbolAtLocation(node.name));
}

var program = ts.createProgram([process.argv[2]], {lib: ['DOM'], allowJs: true, target: ts.ScriptTarget.ES5, module: ts.ModuleKind.None});
var checker = program.getTypeChecker();
ts.forEachChild(program.getSourceFiles()[0], visit);

1 个答案:

答案 0 :(得分:0)

由于您的函数返回any,因此i的类型为any。此外,i永远不能是类型为obj的{​​{1}}类型。

您可以将您的功能设为通用功能:

{prop: string}

在这种情况下,function fx<T>(arg: T): T {return arg;} var i=fx(obj); 属于i类型。