Typescript 如何使用变量从联合类型中选择类型
我有一种像这样的类型Typescript 如何使用变量从联合类型中选择类型,typescript,Typescript,我有一种像这样的类型 type CreateOrUpdateMutationResult = { createArticle: boolean } | { updateArticle: boolean } 参数结果是CreateOrUpdateStationResult类型 我有一个额外的变量isCreate,它可以判断结果类型 但是我怎样才能让typescript知道结果的真实类型呢 // here ts don't know the result type const status = i
type CreateOrUpdateMutationResult = { createArticle: boolean } | { updateArticle: boolean }
参数结果是CreateOrUpdateStationResult类型
我有一个额外的变量isCreate,它可以判断结果类型
但是我怎样才能让typescript知道结果的真实类型呢
// here ts don't know the result type
const status = isCreate ? result.createArticle : result.updateArticle
我希望ts知道结果的类型如果您知道它是什么,可以使用as转换使其成为正确的类型
interface CreateMutationResult { createArticle: boolean }
interface UpdateMutationResult { updateArticle: boolean }
type CreateOrUpdateMutationResult = CreateMutationResult | UpdateMutationResult
然后
对此,几乎没有可能的解决方案: 您可以测试一个唯一的密钥
const status = 'createArticle' in result ? result.createArticle : result.updateArticle;
当您测试只存在于一种类型中的密钥时,typescript能够根据它推断出类型
或者你可以用打字机
function isCreateResult(result: CreateOrUpdateMutationResult, isCreate: boolean): result is { createArticle: boolean } {
return isCreate; // or 'createArticle' in result
}
const status = isCreateResult(result, isCreate) ? result.createArticle : result.updateArticle
正如您所看到的,实际上并不需要isCreate标志,因为javascript允许以惯用的方式测试键
function isCreateResult(result: CreateOrUpdateMutationResult, isCreate: boolean): result is { createArticle: boolean } {
return isCreate; // or 'createArticle' in result
}
const status = isCreateResult(result, isCreate) ? result.createArticle : result.updateArticle