NodeJS 使用Faker获取和设置所有以下数据的性别

0qx6xfy6  于 2023-11-17  发布在  Node.js
关注(0)|答案(2)|浏览(148)

我正在使用Faker和TypeScript,并且正在努力弄清楚如何以一种可以在后续调用中使用的方式从Faker中捕获返回的性别。这是我想做的:

const gender = faker.name.gender(true);  // <-- returns a string
const firstName = faker.name.firstName(gender);  
const middleName = faker.name.middleName(gender);

字符串
不幸的是,Faker的faker.name.firstName(gender)采用GenderType枚举值,而不是字符串,即使你可以像faker.name.firstName('male')一样使用它。这可以工作,但使用变量gender不起作用。
我是不是漏掉了什么?

ui7jx7zq

ui7jx7zq1#

faker.name.firstName的类型为(gender?: GenderType) => string,其中type GenderType = 'female' | 'male' | 0 | 1; *。
然而,faker.name.gender的类型是(binary?: boolean = false) => string。它可以返回相当广泛的值:

> faker.name.gender()
'T* woman'
> faker.name.gender()
'Intersex'
> faker.name.gender()
'Cis'

字符串
毫无帮助的是,即使你将binary设置为true,它返回的是"Female""Male",这两个都不是GenderType

> faker.name.gender(true)
'Male'
> faker.name.gender(true)
'Female'


虽然有一些规范化,所以这在JavaScript中有效(但不是TypeScript):

> faker.name.firstName("Male")
'Ilene'


要做到这一点,你必须添加一些类型Assert,例如:

import { faker, GenderType } from "@faker-js/faker";
const gender = faker.name.gender(true).toLowerCase() as GenderType;
                                                  // ^ we know this will be true
const name = faker.name.firstName(gender);


或者,如果你想使用大写版本,使用intrinisic字符串操作类型:

const gender = faker.name.gender(true) as "Female" | "Male";
                                    // ^ we know this will be true

// ...

const name = faker.name.firstName(gender.toLowerCase() as Lowercase<typeof gender>);
                                                    // ^ this is obviously true
                                                    //   (if ugly...)


这些问题看起来很棘手,因此我打开了a bug来研究是否可以在上游修复它。

  • (看起来TypeScript中的字符串大小写类型是being explored,所以可能在某个时候不需要as Lowercase
    • 不推荐使用数值:*
> faker.name.firstName(0)
[@faker-js/faker]: name.firstName(number) is deprecated since v6.1.0 and will be removed in v7.0.0. Please use 'female' or 'male' instead.
'Forrest'

wlwcrazw

wlwcrazw2#

对于Python实现,我使用:

from faker import Faker
a = Faker()
print(a.name_female())

字符串

相关问题