使用 Faker 获取和设置以下所有数据的性别
Using Faker to get and set gender for all following data
我正在将 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
不起作用。
我是不是漏掉了什么?
faker.name.firstName
具有类型 (gender?: GenderType) => string
,其中 type GenderType = 'female' | 'male' | 0 | 1;
*.
但是,faker.name.gender
的类型是 (binary?: boolean = false) => string
。它可以 return 相当广泛的值范围:
> faker.name.gender()
'T* woman'
> faker.name.gender()
'Intersex'
> faker.name.gender()
'Cis'
毫无帮助,即使你将 binary
设置为 true
,它 returns 是 "Female"
或 "Male"
,两者实际上都不是GenderType
:
> faker.name.gender(true)
'Male'
> faker.name.gender(true)
'Female'
尽管有一些规范化,所以这在 JavaScript 中有效(但 不适用于 TypeScript):
> faker.name.firstName("Male")
'Ilene'
要完成这项工作,您必须添加一些 type assertions,例如:
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 string manipulation types:
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'
我正在将 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
不起作用。
我是不是漏掉了什么?
faker.name.firstName
具有类型 (gender?: GenderType) => string
,其中 type GenderType = 'female' | 'male' | 0 | 1;
*.
但是,faker.name.gender
的类型是 (binary?: boolean = false) => string
。它可以 return 相当广泛的值范围:
> faker.name.gender()
'T* woman'
> faker.name.gender()
'Intersex'
> faker.name.gender()
'Cis'
毫无帮助,即使你将 binary
设置为 true
,它 returns 是 "Female"
或 "Male"
,两者实际上都不是GenderType
:
> faker.name.gender(true)
'Male'
> faker.name.gender(true)
'Female'
尽管有一些规范化,所以这在 JavaScript 中有效(但 不适用于 TypeScript):
> faker.name.firstName("Male")
'Ilene'
要完成这项工作,您必须添加一些 type assertions,例如:
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 string manipulation types:
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'