- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
有没有办法让 TypeScript 静态检查空字符串?有没有办法静态要求将非空字符串传递给函数?
let fn = function(a:string){
};
fn('');
或
let a = '';
fn(a);
TS 可以帮助我们吗?
最佳答案
我相信这与您将只使用打字系统(而不是使用“nonEmptyString”类)一样接近
type nonEmptyString = never; // Cannot be implicitly cast to
function isNonEmptyString(str: string): str is nonEmptyString {
return str && str.length > 0; // Or any other logic, removing whitespace, etc.
}
测试它:
let fn = function(a: nonEmptyString) {
}
let someStr = '';
if (isNonEmptyString(someStr)) {
fn(someStr); // Valid
} else {
fn(someStr); // Compile error
}
不幸的是,由于 nonEmptyString
是 never
,所以您最终会遇到问题。这意味着您需要将 nonEmptyString
显式转换回 string
。
let fn = function(a: nonEmptyString) {
let len = a.length; // Invalid
let len2 = (<string>a).length; // Valid
let str = a + 'something else'; // Valid (str is now typed as string)
}
一个可能的解决方案是:
type nonEmptyString = string & { __nonEmptyStr: never };
这减轻了必须显式转换回字符串的问题(上面所有三个测试都是有效的),但是确实用 __nonEmptyStr
污染了类型(这将是 undefined
如果被引用)。
关于TypeScript 检查空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44688840/
我正在尝试创建一个程序,其中字符串的前三个字符重复给定次数,如下所示: foo('Chocolate', 3) # => 'ChoChoCho' foo('Abc', 3) # => 'AbcAbcA
我有以下字符串: std::string str = "Mode:AAA:val:101:id:A1"; 我想分离一个位于 "val:" 和 ":id" 之间的子字符串,这是我的方法: std::st
DNA 字符串可以是任意长度,包含 5 个字母(A、T、G、C、N)的任意组合。 压缩包含 5 个字母(A、T、G、C、N)的 DNA 字母串的有效方法是什么?不是考虑每个字母表 3 位,我们可以使用
是否有一种使用 levenstein 距离将一个特定字符串与第二个较长字符串中的任何区域进行匹配的好方法? 例子: str1='aaaaa' str2='bbbbbbaabaabbbb' if str
使用 OAuth 并使用以下函数使用我们称为“foo”(实际上是 OAuth token )的字符串加密 key public function encrypt( $text ) { // a
我是一名优秀的程序员,十分优秀!