是否有类似Flow的不完整(部分)声明?

时间:2016-11-06 02:24:51

标签: javascript declaration flowtype

我想逐步添加外部库的声明。是否可以编写一个仅描述对象/接口的某些属性的声明,并且声明中省略了剩余属性,从而取消选中?

例如:可以关注对象

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;
}

1 个答案:

答案 0 :(得分:1)

type PartialA = {foo:number, [key:string]: any}
const a: PartialA = {foo: 1, bar: 2}
console.log(a.bar)

这个选项比后续选项更安全,因为已知属性的类型是强制的:

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

使用Flow v0.34.0进行测试

信用:@loganfsmyth@gcanti