Flowtype:如何创建类型保护功能?

问题描述 投票:0回答:2

我想使用函数中的类型改进。 如何在流程中创建类型保护函数(TypeScript)?

I TypeScript 示例:

function isString(arg: Showable): arg is string {
    return typeof arg === 'string';
}

II流程

/* @flow */
type Showable = number | string;

// ok
function barOk (arg: Showable) {
  return typeof arg === 'string' ? arg.length : (arg + 1);
}

// type guard function
function isString(arg: Showable) {
    return typeof arg === 'string';
}

// Error
function barError (arg: Showable) {
  return isString(arg) ? arg.length : (arg + 1);
                         // ^ Cannot get `arg.length` because property `length` is missing in `Number`
}
flowtype
2个回答
3
投票

将您的

isString
函数更改为以下内容:

function isString(arg: Showable): boolean %checks {
    return typeof arg === 'string';
}

参见 谓词函数


0
投票

Flow 实现了 Type Guards,并自

v0.224.0
起弃用 %checks

他们推荐使用类型保护语法(类似于 TS):

 function isString(arg: any): arg is string {
     return typeof arg === "string";
 }
© www.soinside.com 2019 - 2024. All rights reserved.