类型推断支持Javascript

问题描述 投票:0回答:1

我尝试使用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);
javascript typescript type-inference
1个回答
0
投票

因为你的函数返回any所以i也是any类型。 i也不能只是obj类型的{prop: string}

您可以使您的功能成为通用功能:

function fx<T>(arg: T): T {return arg;}
var i=fx(obj);

在这种情况下,i属于{prop: string}类型。

© www.soinside.com 2019 - 2024. All rights reserved.