8

我正在为现有的 JS 库(CKEditor)编写一些定义。是否可以比 更具体toolbar: any

文档:

工具栏:数组/字符串

工具箱(别名工具栏)定义。它是一个工具栏名称或一组工具栏(条),每个工具栏也是一个数组,包含一个 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() );
4

3 回答 3

16

Typescript 1.4 现在支持联合类型

当然,您仍然需要检查函数内部的值并做出相应的反应,但是现在您可以在编译时检查,而无需将类型更改为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

于 2015-05-11T06:07:25.063 回答
2

不幸的是,Typescript 不支持联合类型,并且在不久的将来不太可能这样做。

线程中有两个建议:

  1. 函数重载
  2. 泛型

在给定的代码段中,我无论如何都看不到避免该any类型。但是,在代码片段之外,如果toolbar参数作为参数传递,函数重载可能能够表达它们的类型。

于 2013-07-12T15:20:51.647 回答
1

您可以将工具栏建模为一个数组一个字符串。

interface ArrayAndString extends Array, String { }
var toolbar: ArrayAndString = editor.config.toolbar;

这表示数组和字符串操作都是合法的,这不是真的,并且没有比any. 没有办法模拟它可以是一个或另一个,但不能两者兼而有之。

于 2013-07-12T18:34:44.373 回答