2017-12-03 114 views
0
//ts code 
function div(props?: { id?: String; style?: any }) { 
     return function(...children: ReactNode[]) { 
     return createElement("div", props, ...children); 
     }; 
    } 
const d = div({ id: "hello" })("welcome to TS"); 

生成的JS代码打字稿编译器是否有@inline功能选项?

function div(props) { 
    return function() { 
     var children = []; 
     for (var _i = 0; _i < arguments.length; _i++) { 
      children[_i] = arguments[_i]; 
     } 
     return createElement("div",props,...); 
    }; 
} 
var d = div({ id: "hello" })("welcome to TS"); 

//努力实现

var d = createElement("div",{ id: "hello" },"welcome to TS") 

确实打字稿支持@inline的功能呢?如果不是最好的方式实现类似的..

+2

不,在打字稿内联函数的支持,你应该相信JS运行时做了优化,或手编代码你想要的方式。 –

+1

要添加到以前的评论,请阅读[“JavaScript引擎中的自动内联”](https://ariya.io/2013/04/automatic-inlining-in-javascript-engines)---如果您的代码是如果您希望手动优化这些细节,您应该查看WASM(WebAssembly),这正是它的一个用例([Youtube:Dan Callahan:实用WebAssembly | JSConf布达佩斯2017年](https://www.youtube。 com/watch?v = bac0dGQbUto) - 跳过第15分钟)。 –

+0

感谢您的信息:) – invariant

回答

1

不打字支持@inline函数吗?

如果不是最新最好的方式实现类似

你将不得不自己编写的工具。我只是不担心它。

使刀具自己

使用打字稿编译器找到您要内联函数的引用,然后函数体插值到那个位置。

开始:一些编译器文档https://basarat.gitbooks.io/typescript/content/docs/compiler/overview.html

+0

感谢您的回复,您可以将我链接到一些文章/教程/文档如何实现类似的东西...,即使它对这种用例没有用,我可能会在未来遇到不同的需求。 。 – invariant

+0

为此增加了更多信息 – basarat