CSS
分段省略
inline-block 设置基本宽度及容器,内部使用line-flex设置动态均分(适用于简单实现省略的场景)
<span className={styles.wrapper}>
<span className={styles.container}>
<span className={styles.block}>xxxxxxxx</span>
<span>(</span>
<span className={styles.block}>vvvvvvvv</span>
<span>)</span>
</span>
</span>
.wrapper {
width: calc(100% - 30px);
word-break: keep-all;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
display: inline-block;
.container {
display: inline-flex;
max-width: 100%;
.block {
text-overflow: ellipsis;
overflow: hidden;
}
}
}
TypeScript
非空数组断言
使用 interface 进行 Array 类型重载,主要改变 0 位必定有内容,及 pop 返回非 undefined,再通过谓语函数进行断言以改变词法上下文中的类型。
/** Array 重载 */
interface NonEmptyArray<A> extends Array<A> {
0: A;
pop(): A;
}
// 谓语函数
const isStackNonEmpty = <T extends unknown>(a: T[]): a is NonEmptyArray<T> => a && a.length > 0
对于自造 stack 进行 pop 推出,push 推入的场景比较适用。