我正在为现有的JS库(CKEditor)编写一些定义。是否可能比toolbar: any
更具体?
文档:
toolbar:Array / String
工具箱(别名工具栏)定义。它是工具栏名称或 工具栏(条带)数组,每个工具栏也是一个数组,包含一个 UI项目列表。
图书馆代码:
var toolbar = editor.config.toolbar;
// If it is a string, return the relative "toolbar_name" config.
if ( typeof toolbar == 'string' )
toolbar = editor.config[ 'toolbar_' + toolbar ];
return ( editor.toolbar = toolbar ? populateToolbarConfig( toolbar ) : buildToolbarConfig() );
答案 0 :(得分:16)
当然,您仍然需要检查函数内部的值并做出相应的反应,但现在您可以在不必将类型更改为any
的情况下进行编译时检查。
function f(x: number | number[]) {
if (typeof x === "number") {
return x + 10;
}
else {
// return sum of numbers
}
}
http://blogs.msdn.com/b/typescript/archive/2015/01/16/announcing-typescript-1-4.aspx
答案 1 :(得分:2)
不幸的是,Typescript不支持联合类型,不太可能这样做in the near future。
线程中有两条建议:
在给定的代码段中,我无法看到避免any
类型。但是,在代码片段之外,如果toolbar
参数作为参数传递,则函数重载可能能够表达这些参数的类型。
答案 2 :(得分:1)
您可以建模工具栏是一个数组和一个字符串。
interface ArrayAndString extends Array, String { }
var toolbar: ArrayAndString = editor.config.toolbar;
这表示数组和字符串操作都是合法的,这不是真的,并且没有比any
更好的安全性。没有办法模拟它可以是一个或另一个但不是两者。