在下面parser?: Object;
上gulp-postcss的类型定义中,可以播放任何npm库。我应该如何注释它?
/// <reference types="node"/>
import Vinyl = require('vinyl');
declare function GulpPostCss(plugins?: string[], options?: GulpPostCss.Options): NodeJS.ReadWriteStream;
declare function GulpPostCss(callback?: (file: Vinyl) => { plugins?: string[], options?: GulpPostCss.Options }):
NodeJS.ReadWriteStream;
declare namespace GulpPostCss {
interface Options {
parser?: Object;
}
}
export = GulpPostCss;
在没有其他解决方案的情况下(当然,DefinitelyTyped不接受any
类型),当然Object
或Object
是最后的解决方案。
答案 0 :(得分:1)
在Typescript 3.0中,有一个名为the unknown
type的新语言项。它在某种程度上类似于any
,意味着它可以容纳所有可能的值(所有内容都可以分配给unknown
),但有一个很大的区别:使用any
您可以立即进行任何操作,但是使用unknown
时,您不能做任何事情或将其分配给任何事情,而无需先检查您真正获得的价值(或确定使用type assertion)您所拥有的)。当存在任意映射时,这是最合适的选择。
如果必须支持3.0之前的版本,则可以通过进行并集来模拟unknown
类型,就像完成here一样:
export type mixed = { [key: string]: any } | object | number | string | boolean | symbol | undefined | null | void;
declare global {
type unknown = mixed;
}
这有一个缺点,但是,您不能轻易包括索引类型-请注意,{ [key: string]: any }
中的值是any
,而不是unknown
,因为后者会使定义直接递归。
关于Object
类型的附带说明:我不知道无法用object
来安全替换它的任何用例,除非明确键入构造函数。这似乎是DefinitelyTyped不接受它的原因。一个警告是object
类型在某种程度上更具局限性,因为您不能在其中存储string
(但是可以存储String
对象)。