javascript - Flow 是否存在不完整(部分)声明之类的情况?

标签 javascript declaration flowtype

我想逐步添加外部库的声明。是否可以编写一个仅描述对象/接口(interface)的某些属性的声明,而其余属性从声明中省略,从而不受检查?

例如:可以跟随对象

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

最佳答案

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

关于javascript - Flow 是否存在不完整(部分)声明之类的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40445406/

相关文章:

javascript - 为什么要使用 HTML 5 Canvas 标签?

javascript - javascript中的正则表达式匹配反向组

c - 字符串的声明和初始化

c - 声明说明符和声明符

c++ - C++ 中命名空间中的变量声明

javascript - 如何停止嵌套在函数中的时间函数?

JavaScript with() 函数

javascript - Flowtype——如何导出和导入类型?

javascript - 如何细化 Flow 中的综合事件?

javascript - 具有 promise 的流类型(获取的)