在Power Query(M)中,我找到了2种声明类型的方法:<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css">
<div class="share-icon" onclick="shairIcon(this)">
<i class="fa fa-share-alt" aria-hidden="true"></i>
</div>
或myVar as type
每个似乎都适用于不同的背景。例如:
type text
或
Table.AddColumn(myTable, "NewName", each [aColumn], type text)
但是,这并不像我期望的更复杂的类型,例如MyFunc = (aParam as any) as date => Date.From(aParam)
或{text}
,它们只是文本值或仅列出数字。我可以使用{number}
语法来使用这些类型,但不能使用type
语法。
为什么/不?
另外,声明M中的类型是否会对性能产生影响,或者只是在传递/返回错误类型时引发错误?
答案 0 :(得分:2)
在&#34; M&#34;中声明类型通常应该对性能影响很小,并且会使您的功能更加自我记录&#34;。
当调用一个函数时,函数参数类型为&#34; kind&#34;已选中,而不是自定义的完整类型定义。因此,将数字列表传递给期望文本列表的函数不会导致任何错误。你可以看到一些&#34; M&#34;:
let
FunctionType = type function (l as { text }) as any,
UntypedFunction = (l) => l{0},
TypedFunction = Value.ReplaceType(UntypedFunction, FunctionType),
Invoked = TypedFunction({0, 1, 2})
in
Invoked
不检查递归类型有利于提高性能,因为检查列表中的每个元素都需要循环遍历整个列表。
当您编写像(l) => l{0}
这样的函数值时,您只能使用as list
而不是as { text }
等基本类型。我认为这个限制旨在指导函数作者不要放置不受函数尊重的类型限制。
您可以在Language Specification中详细了解语法允许的内容。 (如果该链接死亡,您应该能够关注MDSN中的PDF链接。)