Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否存在类似于流的不完整(部分)声明?_Javascript_Declaration_Flowtype - Fatal编程技术网

Javascript 是否存在类似于流的不完整(部分)声明?

Javascript 是否存在类似于流的不完整(部分)声明?,javascript,declaration,flowtype,Javascript,Declaration,Flowtype,我希望以增量方式为外部库添加声明。是否可以编写一个声明,只描述对象/接口的某些属性,而其余属性则从声明中省略,因此未选中 例如:可以使用以下对象 const a = {foo: 8, bar: 9} 是否只有一个属性的声明 declare var a: any|{foo: number} // doesn't actually work 预期的行为是,如果在声明中找到属性,则强制执行该类型。所有未提及的属性类型均被视为any Typescript使用额外的属性表达式解决此问题: inter

我希望以增量方式为外部库添加声明。是否可以编写一个声明,只描述对象/接口的某些属性,而其余属性则从声明中省略,因此未选中

例如:可以使用以下对象

const a = {foo: 8, bar: 9}
是否只有一个属性的声明

declare var a: any|{foo: number} // doesn't actually work
预期的行为是,如果在声明中找到属性,则强制执行该类型。所有未提及的属性类型均被视为
any


Typescript使用额外的属性表达式解决此问题:

interface Iface {
    foo: number;
    [propName: string]: any;
}
此选项比以下选项更安全,因为已知属性的类型是强制的:

a.foo = 'a' // causes error
// 6: a.foo = 'a'
//            ^ string. This type is incompatible with
// 3: type PartialA = {foo:number, [key:string]: any}
//                         ^ number

用流量v0.34.0进行试验


信用:,

{foo:number}&Object
也许?
{foo:number,[key:string]:any}
应该可以工作
{foo:number}&Object
或者
{foo:number}&any
都是不安全的:你可以写
b.foo='a'
并进行类型检查
a.foo = 'a' // causes error
// 6: a.foo = 'a'
//            ^ string. This type is incompatible with
// 3: type PartialA = {foo:number, [key:string]: any}
//                         ^ number
type PartialB = {foo:number}&any
const b: PartialB = {foo: 1, bar: 2}
console.log(b.bar)
b.foo = 'a' // Ok in Flow